【问题标题】:What is "channel" in Monologger?Monologger 中的“通道”是什么?
【发布时间】:2019-04-29 06:16:20
【问题描述】:

我正在努力学习Monolog,我正在学习本教程:https://stackify.com/php-monolog-tutorial/

它说

首先,在创建记录器时,应包含通道名称,以便区分记录器列表。

$logger = new MonologLogger('channel-name'); $app->container->logger = $logger;

在上面的示例中,“通道名称”应包含在每个日志条目中。这样您就可以轻松查找和过滤条目;为每个组件创建另一个通道。这些渠道的示例可能包括“数据库”、“安全”、“业务”等。

那么究竟什么是渠道,我应该如何使用它们?

【问题讨论】:

标签: php logging monolog


【解决方案1】:

简单来说,您可以将通道定义为单独的日志文件。

通常您可能需要为不同的服务或模块对日志文件进行分类。

为此,Monolog 允许您创建不同的通道,每个通道可以单独记录到不同的文件,并允许您配置每个通道的日志。

在你所指的那一行

 $logger = new MonologLogger('channel-name'); 
 $app->container->logger = $logger;

您在 Monologger 的构造函数中指定通道。

每当您使用此 $logger 对象时,它都会写入您在配置通道时指定的文件。下面是一个来自 Symfony 文档的通道配置示例

https://symfony.com/doc/current/logging/channels_handlers.html#switching-a-channel-to-a-different-handler

   monolog:
      handlers:
          security:
             # log all messages (since debug is the lowest level)
             level:    debug
             type:     stream
             path:     '%kernel.logs_dir%/security.log'
             channels: [security]

在这种情况下,您可以在代码中这样做以使用频道

 $logger = new MonologLogger('security');

然后您将使用“调试”级别的“流”类型错误记录到“security.log”。

【讨论】:

    【解决方案2】:

    这里的“通道”不是一个通用的 PHP 概念,它只是 monolog 用于您要记录的一类消息的术语。

    来自the monolog usage documentation

    您可以创建许多 Logger,每个 Logger 都定义一个通道(例如:db、request、router 等),并且每个都结合了各种处理程序,这些处理程序可以共享也可以不共享。频道反映在日志中,让您可以轻松查看或过滤记录。

    在该页面的下方,有another section on using channels

    通道是识别记录与应用程序的哪个部分相关的好方法。这在大型应用程序中很有用(并且在 Symfony 中被 MonologBu​​ndle 所利用)。

    想象两个记录器共享一个写入单个日志文件的处理程序。通道将允许您识别发布每条记录的记录器。您可以轻松地通过 grep 过滤这个或那个频道的日志文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-21
      • 2014-07-30
      • 2011-01-29
      • 2013-10-20
      • 1970-01-01
      • 2021-10-05
      • 1970-01-01
      • 2020-11-04
      相关资源
      最近更新 更多