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
- |_错误
|_年
|_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 个文件中保存了相同的警告,而不是保存它仅在警告日志中。
有什么想法吗?
提前致谢。
所以我才发现问题出在哪里。
我缺少一个参数,$maxFiles
。
$infoStreamHandler = new \Monolog\Handler\RotatingFileHandler($settings['path_info'].'/info.log', 0, Monolog\Logger::INFO);
它现在完美运行了!
如果您想将日志划分为 ./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"} []
我正在尝试用 monolog 做一些我不确定是否可行的事情。所以我在想一个实用的方法来组织日志文件。
起初我以为有3个不同的文件,INFO、WARNING和ERROR,但是很难在de文件中搜索特定的日期。所以我决定这样组织:
日志
- |_ 信息 |_年 |_12-05-2016.log
- |_警告 |_年 |_12-05-2016.log
- |_错误 |_年 |_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 个文件中保存了相同的警告,而不是保存它仅在警告日志中。
有什么想法吗?
提前致谢。
所以我才发现问题出在哪里。
我缺少一个参数,$maxFiles
。
$infoStreamHandler = new \Monolog\Handler\RotatingFileHandler($settings['path_info'].'/info.log', 0, Monolog\Logger::INFO);
它现在完美运行了!
如果您想将日志划分为 ./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"} []