【发布时间】:2015-04-20 23:33:32
【问题描述】:
我在配置 Monolog 以处理“嵌套记录器”时遇到了一些问题。
我想做的事:
从服务记录到专用文件(每个服务一个)和从所有服务到一个文件。每个记录器也应由monolog.handlers.console 处理。
我为什么要这样做
每个服务都有逻辑,但可以使用来自 DI 的其他服务。我想知道一个服务到底记录了什么,所以我想要每个服务的专用记录器(带有自定义通道和自定义日志文件)。 但是当服务依赖其他服务时,我想在一个文件中按时间顺序读取日志。
我有什么
app/config.yml:
monolog:
handlers:
my_handler:
type: stream
path: %kernel.logs_dir%/%kernel.environment%.my.log
level: info
handler: my_bundle_handler
src/My/Bundle/Resources/config/config.yml
services:
# LOGGERS
my_logger:
class: Symfony\Bridge\Monolog\Logger
arguments: [my_logger]
calls:
- [pushHandler, [@monolog.handler.console]]
- [pushHandler, [@my_bundle_handler]]
tags:
- { name: monolog.logger, channel: my_channel}
# HANDLERS
my_bundle_handler:
abstract: true # Without it it will throw exception
type: group
members: [my_service_handler]
channels: ["my_channel"]
tags:
- { name: log_handler }
my_service_handler:
class: Monolog\Handler\StreamHandler
arguments: [%kernel.logs_dir%/%kernel.environment%.my_service.log, 100]
channels: ["my_channel"]
tags:
- { name: log_handler }
它没有按预期工作。它记录到my_service.log,但不记录到my.log。
有没有可能实现我想要的?
【问题讨论】:
-
问题解决了吗?
-
还没有,我没有足够的时间来试验它..
-
它不会解决您的问题,但可能会为您节省一些时间并改善日志处理体验,请尝试loggly.com
-
@FrancescoCasula 我做到了,请参阅下面接受的答案的评论。 @veNuker 实际上我们现在使用 ELK 堆栈并将一些日志(错误+)发送到 Logstash,使用 Monolog
gelf处理程序。