solvrtech / symfony-logbook
本软件包提供了与LogBook的集成。
Requires
- php: >=8.0
- ext-pdo: *
- ext-redis: *
- doctrine/dbal: ^2.13|^3.0
- doctrine/doctrine-bundle: ^2.9
- doctrine/orm: ^2.11
- ketut/random-string: ^1.0
- monolog/monolog: ^2|^3
- symfony/cache: ~5.0|~6.0
- symfony/config: ~5.0|~6.0
- symfony/console: ~5.0|~6.0
- symfony/dependency-injection: ~5.0|~6.0
- symfony/http-client: ~5.0|~6.0
- symfony/http-kernel: ~5.0|~6.0
- symfony/monolog-bridge: ~5.0|~6.0
- symfony/monolog-bundle: ^3.8
- symfony/process: ~5.0|~6.0
- symfony/security-bundle: ~5.0|~6.0
Requires (Dev)
- symfony/phpunit-bridge: ~5.0|~6.0
- symfony/yaml: ~5.0|~6.0
This package is not auto-updated.
Last update: 2024-09-20 19:31:56 UTC
README
symfony-logbook 是一个软件包,允许您收集由您的 Symfony 应用程序生成的日志,然后将它们提交到 LogBook。此软件包提供了与 monolog-bundle 的无缝集成,并允许您在各种不同的地方创建和存储日志消息,同时触发各种操作。
要安装 symfony-logbook,请使用 composer 软件包管理器,在您的终端中执行以下命令
composer require solvrtech/symfony-logbook
安装后,请在应用程序的 config/bundles.php 文件中注册 symfony-logbook 软件包,添加以下代码
return [ // ... Solvrtech\Symfony\Logbook\LogbookBundle::class => ['all' => true], ];
如果您没有在 composer require 命令期间执行配方,您需要手动在 /config/packages/logbook.yaml 创建一个新的日志配置文件,内容如下
logbook: api: # The base url of the logbook app. url: "https://logbook.com" # The API key of logbook client app. key: "4eaa39a6ff57c4d5b2cd0a..." # Instance ID is a unique identifier per instance of your apps. instance_id: "default"
请确保将 url 值替换为您的 LogBook 安装的实际 URL,并将 key 值替换为您应用程序生成的 API 密钥。
instance_id 值为您的应用程序部署设置一个唯一的标识符。当您有多个实例或部署时(例如,在水平扩展环境中),这非常有用。例如,您可以设置 "app-1" 作为第一个实例,"app-2" 作为第二个实例。实例 ID 信息将作为日志详细信息显示在 LogBook 中。
注册健康状态检查路由,该路由将由日志簿用于检查应用程序的健康状态。要在您的 Symfony 应用程序中注册它,请将以下配置添加到您的 config/routes/logbook.yaml 文件
logbook_health: resource: "@LogbookBundle/Resources/config/routes.yaml" prefix: /logbook-health
最后,通过在您的 Symfony 应用程序的 config/packages/security.yaml 文件中添加以下配置来配置健康状态检查路由的安全性
security: providers: # ... logbook_provider: id: Solvrtech\Logbook\Security\LogbookUserProvider firewalls: health_check: pattern: ^/logbook-health stateless: true provider: logbook_provider custom_authenticator: logbook.authenticator
将日志提交到 LogBook
将日志提交到 LogBook 的过程涉及到在您的 Symfony 应用程序的 monolog 配置中定义一个日志记录处理器。这可以通过在您的 config/packages/monolog.yaml 文件中添加以下配置来实现(请参阅 将日志写入不同的位置)
monolog: handlers: # ... logbook: # passed *all* logs type: stream # passed only log with debug level or higher level: debug
通过使用上面的 level 配置,您可以指定将提交到您的 LogBook 安装的最低日志级别。日志级别的顺序如下(从低到高)
- DEBUG
- INFO
- NOTICE
- WARNING
- ERROR
- CRITICAL
- ALERT
- EMERGENCY
例如,当您设置 "level: warning" 时,只有 WARNING、ERROR、CRITICAL、ALERT 和 EMERGENCY 等更高优先级的日志级别才会被提交到您的 LogBook 安装。
要在您的代码中提交日志消息,您可以注入默认的日志记录器实例到您的控制器或服务中,然后使用它。例如
use Psr\Log\LoggerInterface; public function index(LoggerInterface $logger) { $logger->info('I just got the logger'); // include extra "context" info in your logs $logger->critical( 'I left the oven on!', [ 'cause' => 'in_hurry', ] ); // ... }
有关如何使用 LoggerInterface 的更多信息,请参阅 其文档。
异步提交日志
默认情况下,日志将在记录时同步提交,这可能会影响您应用程序的性能。幸运的是,您可以通过将日志排队(在数据库或 Redis 中)然后创建一个后台任务来批量提交日志队列来异步提交日志。
因此,首先您需要在您的应用程序的 config/packages/logbook.yaml 文件中配置日志传输配置。使用 DSN 注册传输。
1.a 使用 Doctrine 传输
要使用Doctrine传输进行异步日志处理,请将以下配置添加到您的 config/packages/logbook.yaml 文件中
logbook: transport: 'doctrine://default?batch=15'
在上面的示例中
- "default" 表示它将使用您的应用程序正在使用的默认Doctrine连接。
- "batch=" 指定了从您的应用程序批量发送到LogBook的最大日志数量。
1.b 使用Redis传输
要使用Redis传输进行异步日志处理,请将以下配置添加到您的 config/packages/logbook.yaml 文件中
logbook: transport: 'redis://:6379?batch=15'
在上面的示例中
- "localhost:6379" 指定了将要使用的Redis连接URL。
- "batch=" 指定了从您的应用程序批量发送到LogBook的最大日志数量。
选择最适合您应用程序需求的数据传输选项,并在 logbook.yaml 文件中相应地进行配置。请根据您的需求调整批量大小。
配置传输机制后,您需要通过定期运行 php bin/console logbook:log:consume 命令来提交日志队列。您可以使用Systemd或Supervisor来实现。
2.a 使用Systemd
为日志消费服务创建一个新的服务文件,例如 /etc/systemd/system/log-consume.service,然后将以下配置添加到该文件中
[Unit]
Description=Log Consume
After=network.target
[Service]
ExecStart=/usr/bin/php /path/to/your/symfony/bin/console logbook:log:consume
WorkingDirectory=/path/to/your/symfony
User=www-data
Restart=always
[Install]
WantedBy=multi-user.target
启动服务并在系统重启时启用它
sudo systemctl start log-consume && sudo systemctl enable log-consume
2.b 使用Supervisor
为日志消费服务创建一个新的配置文件,例如 /etc/supervisor/conf.d/log-consume.conf。将以下配置添加到该文件中
[program:log-consume]
command=php /path/to/your/symfony/bin/console logbook:log:consume
directory=/path/to/your/symfony
autostart=true
autorestart=true
stderr_logfile=/var/log/log-consume.err.log
stdout_logfile=/var/log/log-consume.out.log
user=www-data
要启动服务,运行以下命令
sudo supervisorctl reread && sudo supervisorctl update && sudo supervisorctl start log-consume
可选:设置您的应用程序版本
应用程序版本是一个可选参数,也可以包含在LogBook安装中日志提交数据内。为此,请确保在Symfony应用程序的 /config/service.yaml 文件中设置版本
parameters: # ... version: "1.0.0"
值得注意的是,虽然建议设置应用程序版本,但这是一个可选步骤。当找不到"version"配置时,日志提交应正常工作,但提交日志中不会找到版本信息。