繁体   English   中英

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

[英]Monolog RotatingFileHandler save to a specific file according to log type

我正在尝试用 monolog 做一些我不确定是否可行的事情。 所以我在想一个实用的方法来组织日志文件。

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

日志

  • |_ 信息 |_年 |_12-05-2016.log
  • |_警告 |_年 |_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 个文件中保存了相同的警告,而不是仅将其保存在警告日志中。

有什么想法吗?

先感谢您。

如果要将日志划分为./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 path/ ./path/to/directory/2017/07/21-yournamelog.log创建日志文件, ./path/to/directory/2017/07/21-yournamelog.log包含以下内容:

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

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

它现在完美运作!

在较新版本的 symfony(4.4) 中,您可以在旋转处理程序上设置日期格式和文件名格式。

这是来自 monolog yaml 文件的示例:

my_channel:
        type: rotating_file
        path:     "%kernel.logs_dir%/%kernel.environment%.my_channel.log"
        level: debug
        date_format: 'Y/m/d'
        filename_format: '{date}-{filename}'
        channels: [my_channel]

它会将其保存在路径“Y/m/d-my_channel.log”中

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM