paysera/lib-logging-extra-bundle

Symfony扩展包,用于进一步整合Monolog、Sentry和Graylog

2.2.0 2023-11-24 13:51 UTC

This package is auto-updated.

Last update: 2024-09-24 15:41:15 UTC


README

Latest Version on Packagist Software License Build Status Coverage Status Quality Score Total Downloads

Symfony扩展包,用于进一步整合Monolog、Sentry和Graylog。

为什么?

Monolog已经提供了与Sentry和Graylog的整合。此扩展包重新使用这些整合,并增加了以下功能

  • 更清晰的Graylog消息格式;
  • 添加correlation_id,以关联Sentry中的消息和来自同一进程的Graylog中的消息;
  • 允许按类分组某些异常,而不管它们在哪里抛出或其消息内容如何;
  • 从消息中移除根前缀(通常包含在一些异常消息中);
  • 将上下文映射到日志中可用的Sentry事件。

还提供了推荐的配置,以实现Graylog和Sentry之间良好的协同作用。

安装

composer require symfony/monolog-bundle sentry/sentry-symfony paysera/lib-logging-extra-bundle

在您的内核或bundles.php文件中注册已安装的扩展包,如果未通过flex自动安装。

配置

这是所有三个扩展包的推荐配置。这确保了

  • INFO及更高级别的日志消息总是发送到Graylog;
  • 如果收到ERROR及更高级别的日志消息,所有消息(甚至包括DEBUG,但最多50条)都将发送到Graylog。这有助于调试任何问题,因为您可以得到更多关于所发生情况的详细信息;
  • ERROR级别的日志消息发送到Sentry,因此您可以查看应用程序中发生的任何错误;
  • 即使Sentry或Graylog服务器出现故障,日志记录也不会中断或影响您的应用程序
    • Graylog使用UDP,因此无需等待响应。处理器还包装在安全措施中,以避免DNS解析错误影响您的应用程序;
    • Sentry使用HTTP,但默认具有错误处理,并在进程关闭时发送消息;配置覆盖默认的3次重试为1次——如果Sentry已经被请求淹没,则不需要连续3次发送任何消息;
  • 消息在控制台可见。您可以为任何命令传递参数以进一步增加详细程度,以查看INFO甚至DEBUG日志消息。
monolog:
    handlers:
        info:
            type: filter
            accepted_levels: [INFO, NOTICE, WARNING]
            handler: graylog_failsafe
        debug_and_errors:
            type: filter
            accepted_levels: [DEBUG, ERROR, CRITICAL, ALERT, EMERGENCY]
            handler: graylog_fingers_crossed
        console:
            type: console
            process_psr_3_messages: false
            channels: ["!event", "!doctrine"]
        sentry:
            type: service
            id: paysera_logging_extra.sentry_handler
        graylog_fingers_crossed:
            type: fingers_crossed
            action_level: error
            handler: graylog_failsafe
            stop_buffering: false
            buffer_size: 50
            nested: true
        graylog_failsafe:
            type: whatfailuregroup
            members: [graylog]
            nested: true
        graylog:
            type: gelf
            publisher:
                hostname: '%env(GRAYLOG_HOSTNAME)%'
                port: '%env(GRAYLOG_PORT)%'
                chunk_size: 8154
            formatter: paysera_logging_extra.formatter.gelf_message     # registered by the bundle
            nested: true

sentry:
    dsn: '%env(SENTRY_DSN)%'
    register_error_listener: false
    tracing:
        enabled: false # If using self-hosted Sentry version < v20.6.0
    options:
        environment: '%kernel.environment%'
        release: '%env(VERSION)%' # your app version, optional
        send_attempts: 1

paysera_logging_extra:
  application_name: app-something   # customise this to know which project message was sent from

用法

使用INFO级别及以上的日志记录,以获取发送到Graylog的消息。

使用ERROR级别及以上的日志记录,以获取发送到Sentry的消息。

使用DEBUG级别记录,以在相同请求/进程中出现错误时获取发送到Graylog的消息。要找到这些消息,请从Sentry中的错误开始,并通过提供的correlation_id在Graylog中搜索消息。

语义版本控制

此扩展包遵循语义版本控制

此扩展包的公共API(换句话说,如果您想轻松更新到新版本,则应仅使用以下功能)

  • 只有标记为public="false"的服务;
  • 只有标记为@api的类、接口和类方法;
  • 控制台命令;
  • 支持的DIC标签。

例如,如果只有类方法被标记为@api,则不应扩展该类,因为构造函数可能在任何版本中发生变化。

请参阅Symfony BC规则以获取有关API中可以更改的内容和不能更改内容的基本信息。请注意,在此扩展包中,所有内容默认都是@internal

运行测试

composer update
composer test

贡献

请随意创建问题并提交拉取请求。

本地运行依赖关系

cd example
docker-compose up -d
docker-compose exec sentry sentry upgrade

您可以在 https://:9001/ 找到Graylog,在 https://:9002/ 找到Sentry。

打开Graylog,使用 admin admin 登录,选择 系统 -> 输入 -> GELF UDP -> 启动新输入 -> 输入任何标题并选择节点 -> 保存

打开Sentry,使用由上一个命令创建的用户登录,选择 安装说明 -> Symfony2 -> 复制凭据部分(可能缺少协议、主机名和端口)。运行以下命令,将 HERE_GOES_CREDENTIALS 替换为实际凭据

export SENTRY_DSN=http://HERE_GOES_CREDENTIALS@localhost:9002/1

然后运行测试PHP脚本

php test.php

在Graylog和Sentry实例中查看记录的数据。更改代码进行进一步的测试场景,或者仅使用Graylog和Sentry来设置和测试您的真实项目。

之后进行清理

docker-compose down