etsglobal/log-bundle

安装次数: 28 673

依赖项: 0

建议者: 0

安全性: 0

星标: 0

关注者: 16

分支: 0

类型:symfony-bundle

v5.0.2 2024-09-24 15:43 UTC

README

为所有 ETSGlobal Symfony 应用程序提供规范化的日志和跟踪功能。

Build Status

概述

主要功能

  • 自动日志注入。
  • 提供 TokenCollection 工具,以启用下游应用程序从应用程序到应用程序的请求跟踪。
  • 自动配置 globalprocess token 跟踪,以处理传入的 HTTP 请求/响应以及长时间运行的过程。
  • 自动将应用程序名称和跟踪令牌丰富到日志上下文中。
  • 处理器用于更改异常的日志级别,例如 Symfony 的 NotFoundHttpException
  • Slack 处理器:Monolog 的 slack 处理器的扩展版本,具有自定义消息内容和自定义过滤器。
  • 提供 Guzzle 中间件,通过 HTTP 调用转发令牌。
  • 提供 Symfony HttpClient 装饰器,通过 HTTP 调用转发令牌。

安装

  1. 安装捆绑包
composer require etsglobal/log-bundle
  1. 加载捆绑包
// config/Bundles.php
return [
    ...
    ETSGlobal\LogBundle\ETSGlobalLogBundle::class => ['all' => true],
    ...
];

对于 Symfony < 4

// app/AppKernel.php
$bundles = [
    ...
    new ETSGlobal\LogBundle\ETSGlobalLogBundle(),
    ...
];

配置

捆绑包配置

# config/packages/ets_global_log.yaml
ets_global_log:
    app_name: my-app # Used to filter logs by application.
    slack_handler:
        token: "slack API token"
        channel: "#channel-name"
        jira_url: "example.jira.com"
        kibana_url: "kibana.example.com/app/kibana"
    custom_exceptions_levels:
        My\Custom\Exception: !php/const Monolog\Logger::INFO

Monolog 配置

如果您想使用此捆绑包提供的 Slack 处理器,请添加以下配置

# config/packages/<env>/monolog.yaml
monolog:
    handlers:
        ...
        slack_failure:
            type: 'whatfailuregroup'
            members: ['slack']
        slack:
            type: 'service'
            id:  'ets_global_log.monolog.handler.slack'
            level: "error"

如果您有文件处理器,您可能想使用 token_collection 格式化器来添加跟踪令牌

# config/packages/<env>/monolog.yaml
monolog:
    handlers:
        ...
        file:
            type: "rotating_file"
            path: "%kernel.logs_dir%/%kernel.environment%.log"
            level: debug
            formatter: 'ets_global_log.monolog.formatter.token_collection'

自动日志注入

自动日志注入将尝试在所有带有 ets_global_log.logger_aware 标记的服务中注入日志记录器。服务不喜欢实现 Psr\Log\LoggerAwareInterface 以通过setter注入接收日志记录器。

// src/MyService.php
namespace App;

use Psr\Log\LoggerAwareInterface;
use Psr\Log\LoggerAwareTrait;

class MyService implements LoggerAwareInterface
{
    use LoggerAwareTrait;
}
# config/services.yaml
App\MyService:
    tags:
    - { name: "ets_global_log.logger_aware" }

Symfony HttpClient 装饰器

安装 symfony/http-client

composer require symfony/http-client

配置您的范围客户端

framework:
    http_client:
        scoped_clients:
            my.client:
                base_uri: 'example.com/api/'

就像通常一样,在您的服务中注入 my.client HttpClient。HttpClientDecorator 将装饰 HttpClient 以自动在请求中注入 token_global

Guzzle 中间件

安装 csa/guzzle-bundle

composer require csa/guzzle-bundle

配置具有 "token_global" 中间件的 HTTP 客户端

# config/packages/cas_guzzle.yaml
csa_guzzle:
     profiler: '%kernel.debug%'
     logger: true
     clients:
         foo:
             config:
                 base_uri: "http://example.com/api"
             middleware: ['token_global']