You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用Monolog时如何实现简洁日志输出?

当然可以实现!

完全没问题,不管是改成你想要的极简格式,还是只去掉末尾的空括号,Monolog都支持自定义日志格式来满足你的需求。

核心思路:自定义LineFormatter

Monolog默认的日志格式会包含%context%%extra%占位符,这就是你看到的末尾空括号的来源。我们只需要创建一个自定义的LineFormatter实例,指定你想要的格式字符串即可。


方案1:改成你想要的极简格式

直接定义你期望的日志模板,去掉多余的频道和级别信息,代码示例如下:

use Monolog\Logger;
use Monolog\Handler\StreamHandler;
use Monolog\Formatter\LineFormatter;

// 初始化文件处理器
$logHandler = new StreamHandler('./my_log.log', Logger::INFO);

// 定义自定义格式:日期 + 日志消息
$customFormatter = new LineFormatter(
    "[%datetime%] %message%\n", // 你的目标格式
    'Y-m-d H:i:s', // 指定日期格式,和示例一致
    false,
    true // 关键:忽略空的上下文和额外数据
);

// 将格式器绑定到处理器
$logHandler->setFormatter($customFormatter);

// 创建日志实例并添加处理器
$logger = new Logger('my_logger');
$logger->pushHandler($logHandler);

// 测试输出
$logger->info('My logger is now ready');

执行后日志文件就会输出你想要的样子:

[2018-02-13 15:06:12] My logger is now ready
[2018-02-13 15:06:29] My logger is now ready


方案2:仅去掉末尾的空括号

如果你还想保留频道和级别信息,只是去掉空括号,只需要调整格式字符串即可:

$customFormatter = new LineFormatter(
    "[%datetime%] %channel%.%level_name%: %message%\n",
    'Y-m-d H:i:s',
    false,
    true
);

这样输出的日志会是:

[2018-02-13 15:06:12] my_logger.INFO: My logger is now ready
[2018-02-13 15:06:29] my_logger.INFO: My logger is now ready


关键参数说明

LineFormatter的第四个参数$ignoreEmptyContextAndExtra设为true后,Monolog会自动忽略空的contextextra数据,也就不会再输出那些多余的空括号了。

内容的提问来源于stack exchange,提问作者Adam

火山引擎 最新活动