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

标签 symfony monolog

我的前提是我是 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 顺便说一句

提前致谢

加里

最佳答案

欢迎来到 stackoverflow 加里。

Monolog 是一个库。 Symfony 通过 Bundle 导入库。您可以通过 config 子目录中的 yaml 文件来配置它们。

要了解存在哪些选项,您有三种解决方案:

  1. 谷歌方法。搜索捆绑文档,但就您的情况而言,没有任何相关说明。
  2. Brutus 方法:输入任意值即可获取错误消息。您应该看到像 use_milliseconds 这样的选项存在(如果没有我的开发计算机,我无法尝试它),但我已经使用了 Brutus 方法:)
# config/monolog.yaml
monolog:
    foo: bar
  • Horatio Caine方法:查看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。 Here is the doc with a sample.

    您可以扩展 LineFormatter 并重载构造函数以使用您的格式而不是默认格式。

    关于symfony - 如何在 Symfony 框架上的 Monolog 中设置日志时间戳的格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74140279/

    相关文章:

    php -\Monolog\Formatter\LineFormatter 中的毫秒数 (PHP)

    php - yaml/symfony2 : Override configurations

    php - 拉拉维尔 5.6。如何推送 Monolog 处理器

    Symfony 和 PhpUnit 内存泄漏

    php - 如何停止尝试为已映射到实体的 View 创建表的学说?

    symfony - 上次更新后升级 Symfony2 和 SonataAdminBundle(2013 年 3 月 1 日)

    php - Guzzle HTTP 客户端比 Symfony HTTP 客户端慢

    php - 使用 Symfony2 将 xml 反序列化为对象

    php - 在 Symfony2 中使用 Monolog 旋转日志

    php - Symfony2 Monolog 电子邮件只有一些异常(exception)