Magento 2 update.log zwiększa znaczny rozmiar co minutę

9

AKTUALIZACJA:

Skończyło się na użyciu narzędzia logrotate do obsługi stale rosnących plików dziennika. Skonfigurowałem też kilka zadań crona, które od czasu do czasu sprawdzą niepotrzebne pliki tymczasowe.


Mam skonfigurowany i uruchomiony standardowy cron Magento 2. Po dwóch dniach napotkałem pewne problemy podczas uruchamiania niektórych akcji w panelu administracyjnym. Kiedy sprawdziłem dzienniki serwera, okazało się, że jest to problem z miejscem na dysku. Po dalszym dochodzeniu dowiedziałem się, że to update.log.txtwinowajca. Rozmiar pliku zwiększał się o> 1 MB co minutę. Był czas, kiedy osiągnął ponad 20 GB.

wprowadź opis zdjęcia tutaj

Czy to normalne w przypadku standardowej konfiguracji Magento 2? A może i jak mogę to wyłączyć lub przynajmniej zminimalizować?

Dzieje się tak zarówno w trybie deweloperskim, jak i produkcyjnym.

Konfiguracja Crona została oparta na tym przewodniku .

Zakładka Cron:

* * * * * <path to php binary> <magento install dir>/bin/magento cron:run | grep -v "Ran jobs by schedule" >> <magento install dir>/var/log/magento.cron.log
* * * * * <path to php binary> <magento install dir>/update/cron.php >> <magento install dir>/var/log/update.cron.log
* * * * * <path to php binary> <magento install dir>/bin/magento setup:cron:run >> <magento install dir>/var/log/setup.cron.log

PRZYKŁADOWA ZAWARTOŚĆ DZIENNIKA

/var/www/html/setup/src/Magento/Setup/Console/Command/I18nCollectPhrasesCommand.php /var/www/html/setup/src/Magento/Setup/Console/Command/MaintenanceStatusCommand.pht / var / www /setup/src/Magento/Setup/Console/Command/BackupCommand.php /var/www/html/setup/src/Magento/Setup/Console/Command/DependenciesShowFrameworkCommand.php / var / www / html / setup / src / Magento /Setup/Console/Command/UninstallCommand.php /var/www/html/setup/src/Magento/Setup/Console/Command/InfoTimezoneListCommand.php / var / www / html / setup / src / Magento / Setup / Console / Command /MaintenanceAllowIpsCommand.php /var/www/html/setup/src/Magento/Setup/Console/Command/ModuleStatusCommand.php /var/www/html/setup/src/Magento/Setup/Console/Command/InstallStore. / www / html / setup / src / Magento / Setup / Console / Command / InfoBackupsListCommand.php /var/www/html/setup/src/Magento/Setup/Console/Command/MaintenanceDisableCommand.php /var/www/html/setup/src/Magento/Setup/Console/Command/DiCompileCommand.php / var / www / html / setup / src / Magento / Setup / Console / Command / InstallCommand.php /var/www/html/setup/src/Magento/Setup/Console/Command/UpgradeCommand.php / var / www / html / setup / src / Magento / Setup / Fixtures / IndexersStatesApplyFixture.php /var/www/html/setup/src/Magento/Setup/Fixtures/StoresFixture.php /var/www/html/setup/src/Magento/Setup/Fixtures/CategoriesFixture.php / var / www / html / setup / src / Magento / Setup / Fixtures / SimpleProductsFixture.php /var/www/html/setup/src/Magento/Setup/Fixtures/tax_rates.csv / var / www / html / setup / src / Magento / Setup / Validator / var / www / html / setup / src / Magento / Setup / Validator / DbValidator.php /var/www/html/setup/src/Magento/Setup/Validator/IpValidator.php /var/www/html/setup/src/Magento/Setup/Validator/AdminCredentialsValidator.php / var / www / html / setup / index.php / var / www / html / setup / performance-toolkit /var/www/html/setup/performance-toolkit/.htaccess / var / www / html / setup / performance-toolkit / profile / var / www / html / setup / performance-toolkit / profile / ce /var/www/html/setup/performance-toolkit/profiles/ce/large.xml /var/www/html/setup/performance-toolkit/profiles/ce/small.xml /var/www/html/setup/performance-toolkit/profiles/ce/medium.xml /var/www/html/setup/performance-toolkit/profiles/ce/extra_large.xml / var / www / html / setup / performance -toolkit / README.txt /var/www/html/setup/performance-toolkit/benchmark.jmx /var/www/html/vendor/.htaccess [] []php /var/www/html/setup/src/Magento/Setup/Validator/AdminCredentialsValidator.php /var/www/html/setup/index.php / var / www / html / setup / performance-toolkit / var / www / html / setup / performance-toolkit / .htaccess / var / www / html / setup / performance-toolkit / profile / var / www / html / setup / performance-toolkit / profile / ce / var / www / html / setup / performance -toolkit / profile / ce / large.xml /var/www/html/setup/performance-toolkit/profiles/ce/small.xml /var/www/html/setup/performance-toolkit/profiles/ce/medium.xml /var/www/html/setup/performance-toolkit/profiles/ce/extra_large.xml /var/www/html/setup/performance-toolkit/README.txt / var / www / html / setup / performance-toolkit / benchmark .jmx /var/www/html/vendor/.htaccess [] []php /var/www/html/setup/src/Magento/Setup/Validator/AdminCredentialsValidator.php /var/www/html/setup/index.php / var / www / html / setup / performance-toolkit / var / www / html / setup / performance-toolkit / .htaccess / var / www / html / setup / performance-toolkit / profile / var / www / html / setup / performance-toolkit / profile / ce / var / www / html / setup / performance -toolkit / profile / ce / large.xml /var/www/html/setup/performance-toolkit/profiles/ce/small.xml /var/www/html/setup/performance-toolkit/profiles/ce/medium.xml /var/www/html/setup/performance-toolkit/profiles/ce/extra_large.xml /var/www/html/setup/performance-toolkit/README.txt / var / www / html / setup / performance-toolkit / benchmark .jmx /var/www/html/vendor/.htaccess [] []php / var / www / html / setup / performance-toolkit /var/www/html/setup/performance-toolkit/.htaccess / var / www / html / setup / performance-toolkit / profile / var / www / html / setup / performance-toolkit / profile / ce /var/www/html/setup/performance-toolkit/profiles/ce/large.xml /var/www/html/setup/performance-toolkit/profiles/ce/small.xml / var /www/html/setup/performance-toolkit/profiles/ce/medium.xml /var/www/html/setup/performance-toolkit/profiles/ce/extra_large.xml / var / www / html / setup / performance-toolkit /README.txt /var/www/html/setup/performance-toolkit/benchmark.jmx /var/www/html/vendor/.htaccess [] []php / var / www / html / setup / performance-toolkit /var/www/html/setup/performance-toolkit/.htaccess / var / www / html / setup / performance-toolkit / profile / var / www / html / setup / performance-toolkit / profile / ce /var/www/html/setup/performance-toolkit/profiles/ce/large.xml /var/www/html/setup/performance-toolkit/profiles/ce/small.xml / var /www/html/setup/performance-toolkit/profiles/ce/medium.xml /var/www/html/setup/performance-toolkit/profiles/ce/extra_large.xml / var / www / html / setup / performance-toolkit /README.txt /var/www/html/setup/performance-toolkit/benchmark.jmx /var/www/html/vendor/.htaccess [] []htaccess / var / www / html / setup / performance-toolkit / profile / var / www / html / setup / performance-toolkit / profile / ce / var / www / html / setup / performance-toolkit / profile / ce / large. xml /var/www/html/setup/performance-toolkit/profiles/ce/small.xml /var/www/html/setup/performance-toolkit/profiles/ce/medium.xml / var / www / html / setup / performance-toolkit / profile / ce / extra_large.xml /var/www/html/setup/performance-toolkit/README.txt /var/www/html/setup/performance-toolkit/benchmark.jmx / var / www / html / sprzedawca / .htaccess [] []htaccess / var / www / html / setup / performance-toolkit / profile / var / www / html / setup / performance-toolkit / profile / ce / var / www / html / setup / performance-toolkit / profile / ce / large. xml /var/www/html/setup/performance-toolkit/profiles/ce/small.xml /var/www/html/setup/performance-toolkit/profiles/ce/medium.xml / var / www / html / setup / performance-toolkit / profile / ce / extra_large.xml /var/www/html/setup/performance-toolkit/README.txt /var/www/html/setup/performance-toolkit/benchmark.jmx / var / www / html / sprzedawca / .htaccess [] []txt /var/www/html/setup/performance-toolkit/benchmark.jmx /var/www/html/vendor/.htaccess [] []txt /var/www/html/setup/performance-toolkit/benchmark.jmx /var/www/html/vendor/.htaccess [] []

Znalazłem kilka miejsc, w których ten dziennik może zostać wygenerowany / zaktualizowany:

<INSTALL_DIR>setup\src\Magento\Setup\Console\Command\CronRunCommand.php:
       75      protected function execute(InputInterface $input, OutputInterface $output)
       76      {
       77:         $notification = 'setup-cron: Please check var/log/update.log for execution summary.';
       78  
       79          if (!$this->deploymentConfig->isAvailable()) {

    <INSTALL_DIR>setup\src\Magento\Setup\Model\Cron\ReadinessCheck.php:
      164          $write->writeFile(self::SETUP_CRON_JOB_STATUS_FILE, $resultJson);
      165  
      166:         // write to permanent log file, var/log/update.log
      167          foreach ($errorLogMessages as $errorLog) {
      168              $this->status->add($errorLog, \Psr\Log\LogLevel::ERROR, false);

    <INSTALL_DIR>setup\src\Magento\Setup\Model\Cron\SetupLoggerFactory.php:
       22      {
       23          $logger = new \Monolog\Logger($channelName);
       24:         $path = BP . '/var/log/update.log';
       25          $logger->pushHandler(new \Monolog\Handler\StreamHandler($path));
       26          return $logger;

    <INSTALL_DIR>setup\src\Magento\Setup\Model\Cron\SetupStreamHandler.php:
       17       * @var string
       18       */
       19:     protected $fileName = '/var/log/update.log';
       20  
       21      /**

    <INSTALL_DIR>setup\src\Magento\Setup\Model\Cron\Status.php:
       81          $this->varReaderWriter = $filesystem->getDirectoryWrite(DirectoryList::VAR_DIR);
       82          $this->statusFilePath = $statusFilePath ? $statusFilePath : '.update_status.txt';
       83:         $this->logFilePath = $logFilePath ? $logFilePath : DirectoryList::LOG . '/update.log';
       84          $this->updateInProgressFlagFilePath = $updateInProgressFlagFilePath
       85              ? $updateInProgressFlagFilePath

    <INSTALL_DIR>setup\src\Magento\Setup\Test\Unit\Model\Cron\StatusTest.php:
       71          $this->varReaderWriter->expects($this->any())
       72              ->method('getAbsolutePath')
       73:             ->with('log/update.log')
       74:             ->willReturn('DIR/var/log/update.log');
       75:         $this->assertEquals('DIR/var/log/update.log', $this->status->getLogFilePath());
       76      }
       77  

    <INSTALL_DIR>update\app\code\Magento\Update\CronReadinessCheck.php:
       16      const CRON_JOB_STATUS_FILE = '.update_cronjob_status';
       17  
       18:     const UPDATE_CRON_LOG_FILE = 'var/log/update.log';
       19  
       20      /**#@+
       ..
       91          file_put_contents(MAGENTO_BP . '/var/' . self::CRON_JOB_STATUS_FILE, $resultJson);
       92  
       93:         // If non-accessible paths are found, log an 'error' entry for the same in update.log
       94          if ( !$success && !empty($outputString) ) {
       95              $updateLoggerFactory = new UpdateLoggerFactory();

    <INSTALL_DIR>update\app\code\Magento\Update\Status.php:
       67      ) {
       68          $this->statusFilePath = $statusFilePath ? $statusFilePath : MAGENTO_BP . '/var/.update_status.txt';
       69:         $this->logFilePath = $logFilePath ? $logFilePath : MAGENTO_BP . '/var/log/update.log';
       70          $this->updateInProgressFlagFilePath = $updateInProgressFlagFilePath
       71              ? $updateInProgressFlagFilePath

    <INSTALL_DIR>update\app\code\Magento\Update\UpdateLoggerFactory.php:
       29       */
       30      public function __construct(
       31:         $logFile = '/var/log/update.log',
       32          $channelName = 'update-cron'
       33      ) {

    <INSTALL_DIR>update\cron.php:
       15  $status = new \Magento\Update\Status();
       16  $cronReadinessChecker = new \Magento\Update\CronReadinessCheck();
       17: $notification = 'update-cron: Please check var/log/update.log for execution summary.' . PHP_EOL;
       18  
       19  if (!$cronReadinessChecker->runReadinessCheck()) {

    <INSTALL_DIR>update\dev\tests\integration\testsuite\Magento\Update\StatusTest.php:
       43          $this->statusFilePath = __DIR__ . '/_files/update_status.txt';
       44          $this->tmpStatusFilePath = TESTS_TEMP_DIR . '/update_status.txt';
       45:         $this->tmpStatusLogFilePath = TESTS_TEMP_DIR . '/update.log';
       46          $this->updateInProgressFlagFilePath = TESTS_TEMP_DIR . '/update_in_progress.flag';
       47          $this->updateErrorFlagFilePath = TESTS_TEMP_DIR . '/update_error.flag';

AKTUALIZACJA:

Skończyło się na użyciu narzędzia logrotate do obsługi stale rosnących plików dziennika. Skonfigurowałem też kilka zadań crona, które od czasu do czasu sprawdzą niepotrzebne pliki tymczasowe.

reuelab
źródło
1
Mam ten sam problem z moim sklepem. Mój plik update.log miał rozmiar 23 gi faktycznie rozbił mój mysql zeszłej nocy. Nie jestem pewien, co się dzieje - mam dość waniliową instalację.
Budżetowy Stolarz

Odpowiedzi:

6

O ile mi wiadomo, var/log/update.logplik jest rzeczywiście używany z cronem.

Jest zadeklarowany w \setup\src\Magento\Setup\Model\Cron\Status.php

$this->logFilePath = $logFilePath ? $logFilePath : DirectoryList::LOG . '/update.log';

A następnie odzyskane za pomocą getLogFilePath()metody.

Jeśli sprawdzisz, gdzie wywoływana jest ta metoda, znajduje się ona pod \setup\src\Magento\Setup\Model\Cron\JobFactory.php:

$logStream = fopen($cronStatus->getLogFilePath(), 'a+');
$streamOutput = new MultipleStreamOutput([$statusStream, $logStream]);

Następnie $streamOutputzmienna jest przekazywana jako parametr do klasy zadania, na przykład:

return new JobUpgrade(
    $this->serviceLocator->get('Magento\Setup\Console\Command\UpgradeCommand'),
    $objectManagerProvider,
    $streamOutput,
    $this->serviceLocator->get('Magento\Setup\Model\Cron\Queue'),
    $cronStatus,
    $name,
    $params
);

Jeśli będę nadal korzystać z tego przykładu, $this->outputjest on używany w execute()metodzie:

$this->command->run(new ArrayInput($this->params), $this->output);

run()Metoda jest zadeklarowanavendor\symfony\console\Symfony\Component\Console\Command\Command.php

$outputZmienna jest następnie wykorzystywana w wielu miejscach, takich jak:

    $this->initialize($input, $output);

Jak również :

    if ($input->isInteractive()) {
        $this->interact($input, $output);
    }

    $input->validate();

    if ($this->code) {
        $statusCode = call_user_func($this->code, $input, $output);
    } else {
        $statusCode = $this->execute($input, $output);
    }

Kolejny interesujący:

        } elseif (OutputInterface::VERBOSITY_VERY_VERBOSE === $output->getVerbosity()) {
            $output->writeln('<comment>Install the proctitle PECL to be able to change the process title.</comment>');
        }

Zgodnie z tym ostatnim kodem niektóre rzeczy można zapisać w przypadku bardzo pełnego parametru. Być może konfigurujesz swoje zadania crona -vvi dlatego rejestruje się różne rzeczy.

To nie jest jednoznaczna odpowiedź, ale powinieneś śledzić ślad stosu, który właśnie ci dałem, aby zbadać problem.

Raphael at Digital Pianism
źródło
2

Prawdopodobnie ustawiłeś złe uprawnienia do niektórych folderów. / update / cron wyświetla wszystkie foldery z niewłaściwymi uprawnieniami

Prostym sposobem jest po prostu komentarz w aktualizacji i konfiguracji crontab

#* * * * * <path to php binary> <magento install dir>/update/cron.php >> <magento install dir>/var/log/update.cron.log
#* * * * * <path to php binary> <magento install dir>/bin/magento setup:cron:run >> <magento install dir>/var/log/setup.cron.log

Nie potrzebujesz ich, jeśli nie musisz aktualizować i instalować z panelu administracyjnego.

To niebezpieczny pomysł na serwer produkcyjny. Możesz ręcznie aktualizować za pomocą kompozytora na serwerze testowym / lokalnym; Sprawdź to; następnie skopiuj aktualizacje na serwer produkcyjny.

Tak naprawdę potrzebujesz

* * * * * <path to php binary> <magento install dir>/bin/magento cron:run | grep -v "Ran jobs by schedule" >> <magento install dir>/var/log/magento.cron.log

Zarządza „indeksatorami, wysyła zautomatyzowane wiadomości e-mail, generuje mapę witryny itd.” - zgodnie z opisem w devdocs

moja nazwa wyświetlana
źródło
Tak, zostało to również wskazane w dokumentacji Magento 2 do konfiguracji crona. W każdym razie korzystaliśmy z logrotate i niektórych niestandardowych zadań cron, które sprawdzają i czyszczą system plików, w celu optymalizacji wykorzystania miejsca na dysku.
reuelab
0

Jak wiem, update.logto Twój niestandardowy plik dziennika, ponieważ Magento 2 generuje dziennik tego rodzaju plików

  • var / log / debug.log - tam przechowywane są wszystkie informacje zapisane przez Psr \ Log \ LoggerInterface :: debug ().
  • var / log /ception.log - tam przechowywane są wszystkie informacje o wyjątkach.
  • var / log / system.log - tam zapisywane są informacje z innych poziomów logowania.

Nie jestem pewien, dlaczego generuje tak dużo danych dziennika w twoim pliku, może to być jakiś błąd składniowy lub coś takiego.

Ale sugeruję po prostu wyszukać za pomocą za pomocą update.logz katalogu kodu Magento 2 i usunąć ten dziennik z kodu.

Keyur Shah
źródło
Cześć, dziękuję za odpowiedź. Nie sądzę, że jest to niestandardowy dziennik, ponieważ mogę go znaleźć na niektórych domyślnych klasach Magento. Zaktualizowałem moje pytanie, aby uzyskać więcej informacji.
reuelab