在我们的 Symfony2 应用程序中,我们为我们提供的特定服务查询外部 API。这个 API(我们称之为Acme API
)有时会抛出错误消息,我们通过 Monolog 和 Gelf 将这些错误消息转发到 Graylog2 以跟踪中断。每个错误都记录error
在$logger->err()
.
消息显示在普通消息池中,但收集这些 API 错误消息的自定义流根本不显示任何消息。
所以我的主要问题是:为什么 Graylog 拒绝在流中显示消息,我们可以做些什么来改变这种行为?
配置
目前共有 35 个流(这是因为我们的服务器上有一堆应用程序)。
给 Monolog 的每条消息都有相同的模式:
Acme API Error on "{user action}": {error description}. Additional information: "{more information provided from the API}" on server "{web server name}" and domain "{domain}" for user "{session ID}"
Graylog流规则如下:
Host (regex): ^((?!mycompany-staging).)*$ // Needed to show only logs from the live servers
Facility: app
Full Message (regex): Acme API.*
(我们也尝试设置Full Message regex
to.*Acme API.*
和Acme API Error.*
,但这些都不起作用)
独白配置如下:
// config_prod.yml
// ...
monolog:
handlers:
main:
type: fingers_crossed
action_level: error
handler: nested
level: debug
nested:
type: stream
path: %kernel.logs_dir%/%kernel.environment%.log
level: debug
graylog:
type: gelf
level: warning
publisher:
hostname: mycompany-monitoring.mycompany.ch
// ...