我的前提是我是 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 文件来配置它们。
要了解存在哪些选项,您有三种解决方案:
- 谷歌方法。搜索捆绑文档,但就您的情况而言,没有任何相关说明。
- 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/