crhg/laravel-fluent-logger

laravel和lumen的fluent日志记录器

5.1.1 2023-05-29 03:17 UTC

This package is auto-updated.

Last update: 2024-09-29 06:20:35 UTC


README

laravel的fluent日志记录器(使用Fluentd的Monolog处理器)

fluentd

Tests Coverage Status Scrutinizer Code Quality

License Latest Version Total Downloads

版本

使用方法

Laravel的安装

使用Composer安装此包

$ composer require ytake/laravel-fluent-logger

或composer.json

"require": {
  "ytake/laravel-fluent-logger": "^6.0"
},

支持的自动发现(^Laravel5.5)

laravel

你的config/app.php

'providers' => [
    \Ytake\LaravelFluent\LogServiceProvider::class,
]

发布配置

  • 基本
$ php artisan vendor:publish
  • 使用标签选项
$ php artisan vendor:publish --tag=log
  • 使用提供者
$ php artisan vendor:publish --provider="Ytake\LaravelFluent\LogServiceProvider"

Lumen的使用

使用Ytake\LaravelFluent\LumenLogServiceProvider

bootstrap/app.php

$app->register(\Ytake\LaravelFluent\LumenLogServiceProvider::class);

Lumen将使用你的配置文件副本,如果你将其中一个文件复制到项目根目录下的config目录中。

cp vendor/ytake/laravel-fluent-logger/src/config/fluent.php config/

配置

编辑config/fluent.php

return [

    'host' => env('FLUENTD_HOST', '127.0.0.1'),

    'port' => env('FLUENTD_PORT', 24224),

    /** @see https://github.com/fluent/fluent-logger-php/blob/master/src/FluentLogger.php */
    'options' => [],

    /** @see https://github.com/fluent/fluent-logger-php/blob/master/src/PackerInterface.php */
    // specified class name
    'packer' => null,
    
    // optionally override Ytake\LaravelFluent\FluentHandler class to customize behaviour
    'handler' => null,
    
    'processors' => [],

    'tagFormat' => '{{channel}}.{{level_name}}',
];

添加config/logging.php

return [
    'channels' => [
        'stack' => [
            'driver' => 'stack',
            // always added fluentd log handler
            // 'channels' => ['single', 'fluent'],
            // fluentd only
            'channels' => ['fluent'],
        ],

        'fluent' => [
            'driver' => 'fluent',
            'level' => 'debug',
        ],
        
        'single' => [
            'driver' => 'single',
            'path' => storage_path('logs/laravel.log'),
            'level' => 'debug',
        ],

        'daily' => [
            'driver' => 'daily',
            'path' => storage_path('logs/laravel.log'),
            'level' => 'debug',
            'days' => 7,
        ],

        'slack' => [
            'driver' => 'slack',
            'url' => env('LOG_SLACK_WEBHOOK_URL'),
            'username' => 'Laravel Log',
            'emoji' => ':boom:',
            'level' => 'critical',
        ],

        'syslog' => [
            'driver' => 'syslog',
            'level' => 'debug',
        ],

        'errorlog' => [
            'driver' => 'errorlog',
            'level' => 'debug',
        ],
    ],
];

或自定义 / 使用 via

return [
    'channels' => [
        'custom' => [
            'driver' => 'custom',
            'via' => \Ytake\LaravelFluent\FluentLogManager::class,
        ],
    ]
];

fluentd配置示例

## match tag=local.** (for laravel log develop)
<match local.**>
  type stdout
</match>

示例(生产环境)

<match production.**>
 type stdout
</match>

等等

Lumen的配置示例

fluentd配置示例(lumen)

<match lumen.**>
  type stdout
</match>

标签格式

标签格式可以配置为从LogEntry对象中获取变量。这将用于在fluent中匹配标签。

{{channel}}将是Laravel的当前环境,由APP_ENV配置,而不是config/logging.php中的日志通道。

{{level_name}}将是日志级别的字符串形式

{{level}}日志级别的数字值。调试 == 100等。

您还可以使用存在于LogEntry::$extra中的变量。给定一条消息

$l = new \Monolog\LogRecord(extra: ['foo' => 'bar']);

您可以使用标签格式myapp.{{foo}}生成标签myapp.bar

Monolog处理器

您可以通过将它们添加到fluent.php配置中的processors数组来向monolog处理器添加处理器。

config/fluent.php

'processors' => [function (\Monolog\LogRecord $record) {
    $record->extra['cloudwatch_log_group'] = 'test_group';
    
    return $record;
}],

或者,您可以传递处理器的类名。这有助于保持您的配置与config:cache兼容。

config/fluent.php

'processors' => [CustomProcessor::class],

CustomProcessor.php

class CustomProcessor
{
    public function __invoke(\Monolog\LogRecord $record)
    {
        $record->extra['cloudwatch_log_group'] = 'test_group';

        return $record;
    }
}

作者

许可证

laravel-fluent-logger的代码在MIT许可证的条款下分发。