《交响乐5:快车道》的封面欧宝娱乐app下载地址

欧宝娱乐app下载地址交响乐5:快车道是学习现代Symfony发展,从零到生产的最好书籍。欧宝娱乐app下载地址+300页展示Symfony与Docker,欧宝娱乐app下载地址 api,队列和异步任务,Webpack, spa等。

日志记录

日志记录

欧宝娱乐app下载地址Symfony有一个极简主义PSR-3日志:欧宝娱乐app下载地址Symfony \ \ HttpKernel \ Log \ Logger组件。符合12因素应用程序方法论,它从警告水平stderr

最小日志级别可以通过设置SHELL_VERBOSITY环境变量:

SHELL_VERBOSITY价值 最小日志级别
1 错误
1 请注意
2 信息
3. 调试

也可以通过向构造函数传递适当的参数来更改最小日志级别、默认输出和日志格式欧宝娱乐app下载地址Symfony \ \ HttpKernel \ Log \ Logger组件。要做到这一点,覆盖“记录器”服务定义

日志消息

要记录一条消息,在控制器或服务中注入默认记录器:

使用Psr \ \ LoggerInterface日志;公共函数指数(LoggerInterface美元记录器){美元记录器->信息(“我刚拿到了伐木工”);美元记录器->错误(“出错”);美元记录器->至关重要的(“我忘了关烤箱!”,(//在日志中包含额外的“上下文”信息“原因”= >“in_hurry”,]);/ /……}

日志记录器服务对于不同的日志级别/优先级有不同的方法。看到LoggerInterface获取记录器上所有方法的列表。

独白

欧宝娱乐app下载地址Symfony与独白这是最流行的PHP日志库,用于在各种不同的地方创建和存储日志消息,并触发各种操作。

例如,使用Monolog,您可以配置记录器以基于水平信息的(例如;当出现错误时发送电子邮件)。

在使用基于独白的记录器之前,运行此命令安装它:

1
美元作曲家需要symfony / mo欧宝娱乐app下载地址nolog-bundle

下面的部分假设独白已经安装。

日志存储位置

默认情况下,日志条目被写入var / log / dev.log当你在dev环境。在刺激环境,日志被写入var / log / prod.log,但只有在请求过程中,出现错误或高优先级日志条目(例如:错误(),关键(),alert ()紧急())。

要控制这一点,您需要配置不同的配置处理程序它处理日志条目,有时修改它们,并最终存储它们。

处理程序:将日志写到不同的位置

记录器有一堆处理程序,每个都可以用于将日志项写入不同的位置(例如文件,数据库,Slack等)。

提示

你可以配置日志记录“通道”,它们类似于类别。每个频道都可以有自己的频道自己的处理程序,这意味着您可以在不同的位置存储不同的日志消息。看到如何将消息记录到不同的文件中

欧宝娱乐app下载地址Symfony默认预先配置了一些基本的处理程序monolog.yaml配置文件。下面是一些真实的例子。

这个示例使用两个处理程序:(写入文件)和syslog使用syslog功能:

  • YAML
    12 3 4 5 6 7 8 9 10 11 12 13 14 15
    #配置/包/刺激/ monolog.yaml独白:处理程序:#这个"file_log"键可以是任何东西file_log:类型:# log to var/log/(environment).log路径:“% kernel.logs_dir % / % kernel.environment % . log”# log *all* messages (debug是最低级别)水平:调试syslog_handler:类型:syslog# log错误级别或更高级别的消息水平:错误
  • XML
    12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
    < !——配置/包/刺激/ monolog.xml >< ?encoding="UTF-8"<容器xmlns =“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi =“http://www.w3.org/2001/XMLSchema-instance”xmlns:独白=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/monolog”xsi: schemaLocation =“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/serviceshttps://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services/services-1.0.xsdhttp://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/monologhttps://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/monolog/monolog-1.0.xsd”><独白:配置>< !——这个“file_log”键可以是任何东西——><独白:处理程序name =“file_log”类型=“流”路径=“% kernel.logs_dir % / % kernel.environment % . log”水平=“调试”/>< !——log *all* messages (debug是最低级别)——><独白:处理程序name =“syslog_handler”类型=“syslog”水平=“错误”/>< !——log错误级别或更高的消息< /独白:配置>> < /容器
  • PHP
    12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
    / /配置/包/刺激/ monolog.php美元的容器->loadFromExtension(“独白”,(的处理程序= >(//这个"file_log"键可以是任何东西“file_log”= >(“类型”= >“流”,// log to var/logs/(environment).log .log .log“路径”= >' % kernel.logs_dir % / % kernel.environment % . log ',// log *all* messages (debug是最低级别)“水平”= >“调试”,),“syslog_handler”= >(“类型”= >“syslog”,//日志错误级别的消息和更高“水平”= >“错误”,),),]);

这定义了一个堆栈每个处理程序都是按照定义的顺序调用的。

请注意

如果你想重写独白配置通过另一个配置文件,您将需要重新定义整个处理程序堆栈。两个文件的配置不能合并,因为顺序很重要,并且合并不允许控制顺序。

修改日志条目的处理程序

而不是在某处写日志文件,一些处理程序用于在将日志项发送到之前过滤或修改它们其他处理程序。调用一个强大的内置处理程序fingers_crossed用于刺激默认的环境。它存储所有在请求期间记录消息,但是只有如果其中一条消息到达action_level。把这个例子:

  • YAML
    12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
    #配置/包/刺激/ monolog.yaml独白:处理程序:filter_for_errors:类型:fingers_crossed#如果*一个*日志是错误的或更高,传递*all*到file_logaction_level:错误处理程序:file_log#现在传递*all*日志,但仅当一个日志是错误或更高file_log:类型:路径:“% kernel.logs_dir % / % kernel.environment % . log”#仍然传递*所有*日志,仍然只记录错误或更高的日志syslog_handler:类型:syslog水平:错误
  • XML
    12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
    < !——配置/包/刺激/ monolog.xml >< ?encoding="UTF-8"<容器xmlns =“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi =“http://www.w3.org/2001/XMLSchema-instance”xmlns:独白=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/monolog”xsi: schemaLocation =“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/serviceshttps://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services/services-1.0.xsdhttp://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/monologhttps://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/monolog/monolog-1.0.xsd”><独白:配置>< !——如果*一个*日志是error或更高,传递*all*到file_log——><独白:处理程序name =“filter_for_errors”类型=“fingers_crossed”行动阈值=“错误”处理程序=“file_log”/>< !——现在传递*all*日志,但仅当一个日志是错误或更高——><独白:处理程序name =“file_log”类型=“流”路径=“% kernel.logs_dir % / % kernel.environment % . log”水平=“调试”/>< !——仍然传递*all*日志,仍然只记录error或更高的日志——><独白:处理程序name =“syslog_handler”类型=“syslog”水平=“错误”/>< /独白:配置>> < /容器
  • PHP
    12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
    / /配置/包/刺激/ monolog.php美元的容器->loadFromExtension(“独白”,(的处理程序= >(“filter_for_errors”= >(“类型”= >“fingers_crossed”,//如果*一个*日志是error或更高,传递*all*到file_log“action_level”= >“错误”,的处理程序= >“file_log”,),//现在传递*all*日志,但仅当一个日志是错误或更高“file_log”= >(“类型”= >“流”,“路径”= >' % kernel.logs_dir % / % kernel.environment % . log ',“水平”= >“调试”,),//仍然传递*all*日志,仍然只记录错误或更高的日志“syslog_handler”= >(“类型”= >“syslog”,“水平”= >“错误”,),),]);

现在,如果一个日志条目有错误水平或更高所有该请求的日志条目通过file_log处理程序。这意味着您的日志文件将包含所有关于有问题的请求的细节-使调试更容易!

提示

命名为" file_log "的处理程序不会包含在堆栈本身中,因为它被用作fingers_crossed处理程序。

所有内置的处理程序

独白了许多内置处理邮件日志,发送他们到Loggly,或通知你在Slack。这些都是在MonologBundle本身中记录的。查看完整列表独白配置

如何旋转你的日志文件

随着时间的推移,日志文件可能会增长为巨大的在开发和生产过程中。一个最佳实践解决方案是使用工具,如logrotateLinux命令在日志文件变得太大之前旋转日志文件。

另一种选择是让Monolog使用rotating_file处理程序。这个处理程序每天创建一个新的日志文件,也可以自动删除旧文件。要使用它,请设置类型选择您的处理程序rotating_file:

  • YAML
    1 2 3 4 5 6 7 8 9 10
    #配置/包/刺激/ monolog.yaml独白:处理程序:主要:类型:rotating_file路径:' % kernel.logs_dir % / % kernel.environment % . log '水平:调试日志文件的最大数量#默认为零,这意味着无限的文件max_files:10
  • XML
    12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
    < !——配置/包/刺激/ monolog.xml >< ?encoding="UTF-8"<容器xmlns =“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi =“http://www.w3.org/2001/XMLSchema-instance”xmlns:独白=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/monolog”xsi: schemaLocation =“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/serviceshttps://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services/services-1.0.xsdhttp://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/monologhttps://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/monolog/monolog-1.0.xsd”><独白:配置>< !——" Max -files":保留的日志文件的最大数量默认为零,这意味着无限的文件——><独白:处理程序name =“主要”类型=“rotating_file”路径=“% kernel.logs_dir % / % kernel.environment % . log”水平=“调试”max-files =“10”/>< /独白:配置>> < /容器
  • PHP
    12 3 4 5 6 7 8 9 10 11 12 13
    / /配置/包/刺激/ monolog.php美元的容器->loadFromExtension(“独白”,(的处理程序= >(“主要”= >(“类型”= >“rotating_file”,“路径”= >' % kernel.logs_dir % / % kernel.environment % . log ',“水平”= >“调试”,//最大保留的日志文件数量//默认为零,表示无限个文件“max_files”= >10,),),]);

在服务中使用Logger

如果您的应用程序使用服务自动配置,其类实现的任何服务Psr \ \ LoggerAwareInterface日志会收到对其方法的调用吗setLogger ()使用作为服务传递的默认记录器服务。

如果希望在自己的服务中使用使用特定通道(应用程序默认情况下),您可以任意选择自动装配独白渠道或使用monolog.logger标签的通道属性中解释的依赖注入的参考

为每个日志添加额外的数据(例如,一个唯一的请求令牌)

独白也支持处理器:可以向日志条目动态添加额外信息的函数。

看到如何通过处理器添加额外的数据到日志消息获取详细信息。

这项工作,包括代码样本,是在一个创作共用BY-SA 3.0许可证。