solvrtech/symfony-logbook

本软件包提供了与LogBook的集成。

安装: 93

依赖: 0

建议者: 0

安全: 0

星标: 3

关注者: 1

分支: 1

公开问题: 0

类型:symfony-bundle

v1.0.2 2023-09-22 13:53 UTC

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 安装的最低日志级别。日志级别的顺序如下(从低到高)

  1. DEBUG
  2. INFO
  3. NOTICE
  4. WARNING
  5. ERROR
  6. CRITICAL
  7. ALERT
  8. 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"配置时,日志提交应正常工作,但提交日志中不会找到版本信息。