forci / catchable-bundle
收集未处理的异常的包
Requires
- php: >=8.0
- doctrine/doctrine-bundle: ~1.12|~2.0
- doctrine/orm: ~2.6
- monolog/monolog: ^1.25.3|^2
- symfony/form: ~5.0|~6.0
- symfony/framework-bundle: ~5.0|~6.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.8|^3.0
- wucdbm/php-cs-fixers: ~0.3
- dev-master
- v0.8.7
- v0.8.6
- v0.8.5
- v0.8.4
- v0.8.3
- v0.8.2
- v0.8.1
- v0.8.0
- v0.7.1
- v0.7.0
- v0.6.2
- v0.6.1
- v0.6.0
- v0.5.2
- v0.5.1
- v0.5.0
- v0.4.0
- v0.3.0
- v0.2.1
- v0.2.0
- v0.1.7
- v0.1.6
- v0.1.5
- v0.1.4
- v0.1.3
- v0.1.2
- v0.1.1
- v0.1.0
- dev-dependabot/npm_and_yarn/src/Resources/vue/minimist-and-mkdirp-1.2.8
- dev-dependabot/npm_and_yarn/src/Resources/vue/express-4.17.3
- dev-dependabot/npm_and_yarn/src/Resources/vue/qs-6.4.1
- dev-dependabot/npm_and_yarn/src/Resources/vue/postcss-and-autoprefixer-and-css-loader-and-optimize-css-assets-webpack-plugin-and-vue-loader-8.4.19
- dev-dependabot/npm_and_yarn/src/Resources/vue/shelljs-0.8.5
This package is auto-updated.
Last update: 2024-09-23 01:04:08 UTC
README
按常规注册此包并安装其路由。
要使此包有意义,您需要创建一个单独的连接和一个单独的实体管理器。从0.7版本开始,您不再需要为此包进行任何配置。请遵循 https://symfony.com.cn/doc/4.4/doctrine/multiple_entity_managers.html 并将 ForciCatchableBundle
映射到您的单独EM。
更好的做法是创建一个完全独立的数据库。拥有一个单独的实体管理器还意味着您将无法使用 DoctrineMigrationsBundle
迁移它,因为它不支持多个实体管理器(至少据我所知)。因此,根据您的项目部署策略和/或需求创建/更新您的独立数据库。
上述配置使用默认配置,如果出现Doctrine抛出的异常,将无法正常工作,因为它也会关闭负责将其写入数据库的实体管理器。
警告:此包并不打算替代您的文件或日志记录。它是为了与您的现有基础设施协同工作,并通过您的管理界面更轻松、更优雅地查看错误。
版本 >= ~0.6
在您的 config_prod.yml 中
monolog: handlers: main: type: fingers_crossed action_level: critical handler: grouped # 404 and 405 can build up tons if unnecessary data # You may be better off tracking those from your web server's logs excluded_http_codes: [404, 405] # Alternatively, exclude just 404s at given paths # excluded_404s: # # regex: exclude all 404 errors from the logs # - ^/ grouped: type: group members: [streamed, buffered, catchable] # Log errors to a file streamed: type: stream path: "%kernel.logs_dir%/%kernel.environment%.log" level: debug include_stacktraces: true # Buffer errors to be sent via swift mailer buffered: type: buffer handler: swift # Actual swift mailer handler that gets invoked when action_level: critical # from the main handler occurs swift: type: swift_mailer from_email: errors@some-domain.com to_email: "dev1@some-domain.com" # or list of recipients # to_email: [dev1@some-domain.com, dev2@some-domain.com, ...] subject: "[My Project] An Error in PROD Occurred!" level: debug include_stacktraces: true # CatchableBundle's buffer handler. Logs are formatted using the hardcoded \Monolog\Formatter\ScalarFormatter # and stored locally in an array. After that, upon an Exception, the `Forci\Bundle\Catchable\Subscriber\ExceptionSubscriber` # is invoked, and fetches the logs from this buffer handler. This allows you to have your Symfony logs persisted # together with the serialized \Throwable instance. catchable: type: service id: forci.catchable.monolog.handler.log_buffer
您还可以通过 FilterHandler 将 Catchable 的日志传递过去,以去除冗余内容,如弃用信息。这允许您仅持久化关键错误信息,但将弃用信息记录到文件中。您可以使用 accepted_levels 或 min_level / max_level 中的任何一个,这取决于您的需求。请注意,如果允许弃用信息持久化,您可能会在许多 404 错误后快速用冗余数据填满数据库。在将来,将添加类似忽略错误(如上述 HttpNotFoundException)的功能。
catchable: type: filter handler: catchable_real # Either # min_level: debug # max_level: emergency # Or accepted_levels: [debug, critical] catchable_real: type: service id: forci.catchable.monolog.handler.log_buffer
或者,您可以使用过滤器、缓冲区或任何其他处理程序,而不是 fingers_crossed。请注意:当使用缓冲区时,它必须在某个时刻刷新。这必须发生在 ExceptionSubscriber 被触发之前。因此,使用它与 fingers_crossed 文件和/或电子邮件记录是最佳方法。其他处理程序尚未与 Catchable 的缓冲区服务一起测试。使用时请自行承担风险。
monolog: handlers: # Filter logs to a level you'd like filter: type: filter level: debug handler: catchable # Then channel them into Catchable's buffer for use by the ExceptionSubscriber as described above catchable: type: service id: forci.catchable.monolog.handler.log_buffer
版本 <= ~0.5
在您的 config.yml 中
forci_catchable: entity_manager: default
entity_manager
是您的 SEPARATE 实体管理器。
在您的 config_prod.yml 中
monolog: handlers: limitless: type: service id: forci.catchable.handler.limitless_buffer
此处理程序将收集所有日志并将其存储在数组中,这些数组将可用于 Catchable 的订阅者,并将其保存到数据库中的异常条目。
这也使得您可以使用记录器并记录可能对灾难恢复重要的重要数据。
然后,在您的应用程序中的某个位置创建一个链接到
<a href="{{ path('forci_catchable_root') }}"> Errors </a>
享受吧!
发布 0.6
- 改进了缓冲区处理程序。现在您可以在主处理链中配置它。
- 移除了弃用信息。允许与 Symfony 5 兼容。
- 现在使用来自 Symfony 的
ErrorHandler
组件的FlattenException
,而不是Debug
。 - 移除了关于通过弃用的
FatalThrowableError
类序列化\Throwable
的技巧。
从 0.5 升级到 0.6
- Symfony 的要求现在是 ~4.4|~5.0
- 已删除
Forci\Bundle\Catchable\Serializer\ExceptionSerializer
服务。所有相关代码现在都在Forci\Bundle\Catchable\Collector\ThrowableCollector
中。 - 已删除
forci.catchable.handler.limitless_buffer
服务,取而代之的是更简单的forci.catchable.monolog.handler.log_buffer
。 - 您的缓冲和/或过滤逻辑现在必须由任何内置的 Monolog 处理器处理。这使得缓冲相关日志更加流畅,并与您的其他处理器保持一致。
--
待办事项
- 使忽略异常类成为可能
- 添加一个“隐藏用户已弃用”复选框,用于隐藏以“User Deprecated”开头的日志消息
- 添加文件和消息哈希,由于这些是文本且没有索引,因此通过哈希进行搜索以提高性能(归咎于 Doctrine 不允许指定索引长度)
- 重命名为 ExceptionBundle、ExceptionCollector、ExceptionSerializer 等
- 添加过滤异常配置
- 对错误类型、文件、行、消息、当前日期/小时进行哈希处理,并在可捕获实体中增加“发生次数”计数器