Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用monolog设置日志文件的最大大小_Php_Logging_Monolog - Fatal编程技术网

Php 如何使用monolog设置日志文件的最大大小

Php 如何使用monolog设置日志文件的最大大小,php,logging,monolog,Php,Logging,Monolog,我用的是独白,不知道如何设置最大文件日志大小 我尝试使用MemoryPakusageProcessor,但我认为我的代码是错误的: $formatter = new LineFormatter( null, // Format of message in log, default [%datetime%] %channel%.%level_name%: %message% %context% %extra%\n null, // Datetime

我用的是独白,不知道如何设置最大文件日志大小

我尝试使用MemoryPakusageProcessor,但我认为我的代码是错误的:

$formatter = new LineFormatter(
            null, // Format of message in log, default [%datetime%] %channel%.%level_name%: %message% %context% %extra%\n
            null, // Datetime format
            true, // allowInlineLineBreaks option, default false
            true  // ignoreEmptyContextAndExtra option, default false
        );
$logger = new Logger($logName);
$logSize= new Monolog\Processor\MemoryPeakUsageProcessor(20);
$logger->pushProcessor($logSize);
$stream = new RotatingFileHandler(__DIR__.'./../../app.log',1);
$stream->setFormatter($formatter);
$logger->pushHandler($stream);

但是没有设置最大大小。当超过容量时,它不会删除或清空我的日志文件

,因为大小限制在所有Monolog处理程序中都不存在,所以我必须编写它。请在下面找到我为Slim 3框架编写的解决方案。我相信你可以根据自己的情况调整它

// SLIM 3 framework, from dependencies.php
...

// monolog setup with rotating files according to a size
$container['logger'] = function ($c) {
  // get the settings (array, see below)
  $settings = $c->get('settings')['logger'];

  // rotate log file on size
  $logname = $settings['path'];
  if (file_exists($logname) && filesize($logname) > $settings['maxSize']) {
    $path_parts = pathinfo($logname);
    $pattern = $path_parts['dirname']. '/'. $path_parts['filename']. "-%d.". $path_parts['extension'];

    // delete last log
    $fn = sprintf($pattern, $settings['maxFiles']);
    if (file_exists($fn))
      unlink($fn);

    // shift file names (add '-%index' before the extension)
    for ($i = $settings['maxFiles']-1; $i > 0; $i--) {
      $fn = sprintf($pattern, $i);
      if(file_exists($fn))
        rename($fn, sprintf($pattern, $i+1));
    }
    rename($logname, sprintf($pattern, 1));
  }

  $stream = new Monolog\Handler\StreamHandler($logname, $settings['level']);

  // declare finally the logger
  $logger = new Monolog\Logger($logname);
  $logger->pushHandler($stream);

  return $logger;  // ready to log ;)
};

...
下面是数组中独白设置的示例

'logger' => [
  'name' => 'helloStack',
  'path' => __DIR__ . '/../logs/app.log',
  'level' => \Monolog\Logger::NOTICE,
  'maxSize' => 100000,   // rotate log if exceeds 100Kb
  'maxFiles' => 3
],

这将是对软件包本身的一个很好的补充