Skip to content

ytake/Laravel-FluentLogger

Repository files navigation

laravel-fluent-logger

fluent logger for laravel (with Monolog handler for Fluentd )

fluentd

Tests Coverage Status Scrutinizer Code Quality

License Latest Version Total Downloads

Versions

Framework Library
Laravel / Lumen < v10 ytake/laravel-fluent-logger: ^5
Laravel / Lumen >= v10 ytake/laravel-fluent-logger: ^6

usage

Installation For Laravel

Require this package with Composer

$ composer require ytake/laravel-fluent-logger

or composer.json

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

Supported Auto-Discovery(^Laravel5.5)

for laravel

your config/app.php

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

publish configure

  • basic
$ php artisan vendor:publish
  • use tag option
$ php artisan vendor:publish --tag=log
  • use provider
$ php artisan vendor:publish --provider="Ytake\LaravelFluent\LogServiceProvider"

for Lumen

use Ytake\LaravelFluent\LumenLogServiceProvider

bootstrap/app.php

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

Lumen will use your copy of the configuration file if you copy and paste one of the files into a config directory within your project root.

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

Config

edit 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}}',
];

added 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',
        ],
    ],
];

or custom / use via

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

fluentd config sample

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

example (production)

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

and more

for lumen

fluentd config sample(lumen)

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

Tag format

The tag format can be configured to take variables from the LogEntry object. This will then be used to match tags in fluent.

{{channel}} will be Laravel's current environment as configured in APP_ENV, NOT the logging channel from config/logging.php

{{level_name}} will be the uppercase string version of the log level.

{{level}} is the numeric value of the log level. Debug == 100, etc

You can also use variables that exist in LogEntry::$extra. Given a message like

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

You could use a tag format of myapp.{{foo}} to produce a tag of myapp.bar.

Monolog processors

You can add processors to the Monolog handlers by adding them to the processors array within the fluent.php config.

config/fluent.php:

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

Alternatively, you can pass the class name of the processor. This helps keep your config compatible with 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;
    }
}

Author

License

The code for laravel-fluent-logger is distributed under the terms of the MIT license.

About

fluent logger for laravel (with Monolog handler for Fluentd)

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

 

Packages

No packages published

Languages