我有一个控制台命令,我在initialize
方法中初始化ConsoleLogger:
$this->logger = new ConsoleLogger($output);
但是控制台中没有输出日期。是否可以在输出前加上日期时间?
答案 0 :(得分:2)
我知道这是一个古老的话题,但这是当您搜索“ symfony控制台日志日期”时的第一个结果,这就是为什么我想分享我在尝试解决此问题时所发现的内容。
根据Symfony文档,您可以指定自定义格式程序(可在旧的Symfony 2.6文档中找到) https://symfony.com/doc/2.6//cookbook/logging/monolog_console.html
# app/config/services.yml
services:
my_formatter:
class: Symfony\Bridge\Monolog\Formatter\ConsoleFormatter
arguments:
# NOTE
# The placeholder to use in the `format` is enclosed in single `%` (ex.: `%datetime%`)
# However, here we escape `%` characters so Symfony will not interpret them as service parameters.
# https://symfony.com/doc/current/configuration.html#configuration-parameters
- "[%%datetime%%] %%start_tag%%%%message%%%%end_tag%% (%%level_name%%) %%context%% %%extra%%\n"
但是这还没有解决问题。 看一下ConsoleFormatter的来源,我发现了这一点:
const SIMPLE_FORMAT = "%datetime% %start_tag%%level_name%%end_tag% <comment>[%channel%]</> %message%%context%%extra%\n";
const SIMPLE_DATE = 'H:i:s';
因此,此处的日期设置为H:i:s。
幸运的是,可以使用date_format
选项覆盖此日期。
这是我现在解决的方式:
在我的monolog.yaml中,我添加了格式化程序
console:
type: console
process_psr_3_messages: false
channels: ["!event", "!doctrine", "!console"]
verbosity_levels:
VERBOSITY_NORMAL: DEBUG
formatter: console_log_formatter
在services.yml中,我添加了带有date_format设置的自定义格式化程序
console_log_formatter:
class: Symfony\Bridge\Monolog\Formatter\ConsoleFormatter
arguments:
- date_format: 'Y-m-d H:i:s'
答案 1 :(得分:0)
我无法发布我的代码,因为我的公司不会允许它。
但是我遇到了这个问题并发现解决问题的唯一方法是扩展ConsoleLogger
类并让我的重写log
方法以我想要的格式添加日期,然后再将其传递给使用parent::log()
ConsoleLogger
类中没有任何功能可以包含开箱即用的日期。
答案 2 :(得分:0)
也许您需要定义详细程度
$this->consoleLogger = new ConsoleLogger($output, [LogLevel::INFO => OutputInterface::VERBOSITY_NORMAL]);
希望这就是您要寻找的