gpt4 book ai didi

logging - 如何将一项服务的日志写入单独的文件?

转载 作者:行者123 更新时间:2023-12-03 05:47:41 24 4
gpt4 key购买 nike

通常您只需获得logger服务,日志就会转到:

%kernel.root_dir%/%kernel.environment%.log

我想将 SOAP 服务的消息记录到:

%kernel.root_dir%/%kernel.environment%.soap.log

不写入主日志文件。

我已经阅读了食谱,但我不明白如何配置独白。

有什么帮助、线索吗?

最佳答案

MonologBu​​ndle 使用整个框架的相同处理程序记录所有内容。这意味着如果您的某个服务需要登录到不同的处理程序,您应该创建自己的记录器/处理程序并将其注入(inject)到您的服务中。

这可能是一个示例配置(在 yaml 中):

services:
my_logger:
class: Symfony\Bridge\Monolog\Logger
arguments: [soap]
calls:
- [pushHandler, [@my_handler]]

my_handler:
class: Monolog\Handler\StreamHandler
# 200 = INFO, see Monolog::Logger for the values of log levels
arguments: [%kernel.root_dir%/%kernel.environment%.soap.log, 200]

soap_service:
class: Your\Soap\Client
arguments: [@my_logger]

我希望这能澄清这一点。

更新:从 symfony 2.1 开始,您还可以配置哪些 channel 接收哪些处理程序,因此您也可以执行以下操作:

services:
soap_service:
class: Your\Soap\Client
arguments: [@logger]
tags:
- { name: monolog.logger, channel: soap }

这会创建一个新的soap channel (即接收所有处理程序的记录器实例),然后为此 channel 配置不同的处理程序:

monolog:
handlers:
main:
type: stream
path: %kernel.root_dir%/%kernel.environment%.log
level: error
channels: [!soap]
soap:
type: stream
path: %kernel.root_dir%/%kernel.environment%.soap.log
level: info
channels: [soap]

这意味着主处理程序将接收除肥皂 channel 之外的所有内容,而肥皂处理程序将仅接收肥皂 channel 。如果您希望主日志文件包含所有内容,但也仅单独拥有肥皂日志的副本,您还可以删除主处理程序上的 channels 键。这带来了很大的灵 active ,正如您所看到的, channel 是一个数组,因此您可以列出所需的 channel ,或者使用黑名单 !name 表示法排除某些 channel 并包含其他所有 channel 。

关于logging - 如何将一项服务的日志写入单独的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8169114/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com