paysera / lib-logging-extra-bundle
Symfony扩展包,用于进一步整合Monolog、Sentry和Graylog
Requires
- php: ^7.2 || ^8.0
- ext-json: *
- graylog2/gelf-php: ^1.4.2
- monolog/monolog: ^1.24 || ^2.0
- sentry/sdk: ^3.1
- sentry/sentry: ^3.1
- sentry/sentry-symfony: ^4.0
- symfony/config: ^3.4|^4.0|^5.0|^6.0
- symfony/dependency-injection: ^3.4|^4.0|^5.0|^6.0
- symfony/expression-language: ^3.0 || ^4.0 || ^5.0 || ^6.0
- symfony/framework-bundle: ^3.4.26|^4.2.7|^5.0|^6.0
- symfony/http-kernel: ^3.4|^4.0|^5.0|^6.0
- symfony/monolog-bundle: ^3.4|^5.0
Requires (Dev)
- doctrine/annotations: ^1.14
- doctrine/doctrine-bundle: ~2.6.0
- doctrine/orm: ^2.10
- phpunit/phpunit: ^8.5
- symfony/yaml: ^4.3|^5.0|^6.0
README
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