如何在Monolog on Symfony框架中设置日志时间戳的格式

ikfrs5lh  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(223)

我将前提是这一事实,我是新的symfony,但已使用Laravel一些年。
是否可以通过Symfony中的配置更改日志时间戳字符串的格式(我确信可以)。

[2022-10-18T09:11:04.228289+00:00] app.DEBUG: a message [] []

我想将它们格式化为这样...

[2022-10-18 09:11:04] app.DEBUG: a message [] []

我不确定这是否是相关设置,我怀疑它是其中的一部分,但这是Monolog中的LineFormatter类

class LineFormatter extends NormalizerFormatter
{
    public const SIMPLE_FORMAT = "[%datetime%] %channel%.%level_name%: %message% %context% %extra%\n";

我假设这个位正在格式化时间戳[%datetime%],并且正在从系统范围的配置中提取。如果是这样的话,有人知道我如何覆盖它吗?
使用Symfony 6蓝牙
先谢了
加里

brgchamk

brgchamk1#

欢迎来到stackoverflow,加里.
Monolog是一个库。Symfony通过Bundle导入库。你可以通过config子目录中的yaml文件配置它们。
要了解存在哪些选项,有三种解决方案:

  1. Google方法。搜索bundle文档,但在您的情况下,没有任何关于它的文字。
    1.布鲁特斯法:输入任意值以获得错误消息。您应该看到存在类似use_milliseconds的选项(没有我的dev计算机,我无法尝试它),但我已经使用了Brutus方法:)
# config/monolog.yaml
monolog:
    foo: bar

1.霍雷肖·凯恩法:在monolog包的源代码中,总是有一个描述可用选项的文件。在您的例子中,我在'monolog.xml文件中找到了解决方案:

# vendor/symfony/monolog-bundle/Resources/config/monolog.xml
<?xml version="1.0" ?>

<container xmlns="http://symfony.com/schema/dic/services"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">

    <services>
        <service id="monolog.logger" parent="monolog.logger_prototype" public="false">
            <argument index="0">app</argument>
            <call method="useMicrosecondTimestamps">
                <argument>%monolog.use_microseconds%</argument>
            </call>
        </service>
...

我不能在手机上试用,但它应该能解决您的问题:

# config/monolog.yaml
monolog:
    use_microseconds: false

编辑:因为我发现了这个use_microseconds配置选项,我只是在一个旧的文档中找到一篇关于它的文章:https://symfony.com/doc/3.3/logging/disable_microsecond_precision.html
如果你想删除UTC,你可以创建你自己的格式化程序。处理程序在记录之前使用格式化程序来格式化记录。所有Monolog处理程序默认使用Monolog\Formatter\LineFormatter的一个示例,但是你可以替换它。你的新格式化程序必须实现Monolog\Formatter\FormatterInterface。下面是一个示例文档。
您可以扩充LineFormatter并多载建构函式,以使用您的格式而非预设格式。

相关问题