Monolog RotatingFileHandler根据日志类型保存到特定文件

时间:2016-05-12 09:36:15

标签: php slim monolog

我正在尝试用monolog做点什么,我不确定它是否可行。所以我在想一种组织日志文件的实用方法。

首先我想有3个不同的文件,INFO,WARNING和ERROR,但是在de文件中搜索特定日期会很困难。所以我决定这样组织:

日志

  • | _信息     | _Year         | _12-05-2016.log
  • | _Warning     | _Year         | _12-05-2016.log
  • | _Error     | _Year         | _12-05-2016.log

这是我决定做的事情

$infoStreamHandler = new \Monolog\Handler\RotatingFileHandler($settings['path_info'].'/info.log', Monolog\Logger::INFO);
$warningStreamHandler = new \Monolog\Handler\RotatingFileHandler($settings['path_warn'].'/warning.log', Monolog\Logger::WARNING);
$errorStreamHandler = new \Monolog\Handler\RotatingFileHandler($settings['path_error'].'/error.log', Monolog\Logger::ERROR);

$logger ->pushHandler($infoStreamHandler);
$logger->pushHandler($warningStreamHandler);
$logger->pushHandler($errorStreamHandler);

但这不符合我的预期。我首先使用StreamHandler尝试了它(但它只为所有日期创建了一个文件),但是当我切换到RotatingFileHandler时,它在所有3个文件中保存了相同的警告,而不是保存它只在警告日志中。

有什么想法吗?

提前谢谢。

2 个答案:

答案 0 :(得分:4)

如果您想将日志划分为./path/to/directory/2017/07/21-yournamelog.log,则需要执行以下操作:

$logger = new Logger('chanel-name');
$handler = new RotatingFileHandler('./path/to/directory/yournamelog.log', 0, Logger::INFO, true, 0664);
# '/' in date format is treated like '/' in directory path
# so Y/m/d-filename will create path: eg. 2017/07/21-filename.log
$handler->setFilenameFormat('{date}-{filename}', 'Y/m/d');
$logger->pushHandler($handler);

$array = ["x" => "y"];
$logger->addInfo('new message', $array);

它将在路径中创建日志文件:./path/to/directory/2017/07/21-yournamelog.log,内容为:

[2017-07-21 14:33:49] chanel-name.INFO: new message {"x":"y"} []

答案 1 :(得分:1)

所以我发现了问题所在。 我错过了一个参数$maxFiles$infoStreamHandler = new \Monolog\Handler\RotatingFileHandler($settings['path_info'].'/info.log', 0, Monolog\Logger::INFO);

现在它完美无缺!