【问题标题】:How to change/block Laravel Monolog logging to 2 different locations如何更改/阻止 Laravel Monolog 日志记录到 2 个不同的位置
【发布时间】:2019-12-19 05:52:40
【问题描述】:

Laravel:如何更改/阻止 Monolog 日志记录到 2 个不同的位置

此代码创建一个 Monolog JSON 格式化程序

LogServiceProvider->boot()

$filename = __DIR__.'/../json_logger.log';

// // Create the logger
$logger = new \Monolog\Logger('json_logger');

$stream_handler = new \Monolog\Handler\StreamHandler($filename);
$stream_handler->setFormatter( new \Monolog\Formatter\JsonFormatter() );

// Now add some handlers
$logger->pushHandler($stream_handler);
Log::pushHandler($stream_handler);

\Monolog\Registry::addLogger($logger);

这样使用

Log::info('My json-logger is now ready', 'file'=>__FILE__,'line'=>__LINE__]);

这将以 json 格式

记录到 json_logger.log

BUT 也会以标准格式

记录到 storage/logs/laravel.log

我想在一个地方专门使用 JSON 格式

【问题讨论】:

  • 查看Writing To Specific Channels的文档。您可以使用Log::channel('json_logger')->info('My json-logger is now ready', 'file'=>__FILE__,'line'=>__LINE__]); 登录到单通道

标签: json laravel monolog


【解决方案1】:

您可以在 logging.php 中创建一个新频道

'json' => [
    'driver' => 'single',
    'path' => storage_path('logs/json.log'),
    'level' => 'debug',
    'formatter' => JsonFormatter::class,
],

如果您想将 .env 用作默认频道,请更改它。

LOG_CHANNEL=json

或者你可以说

Log::channel('json')->debug('message');

【讨论】:

  • 我不得不将格式化程序扩展为 \Monolog\Formatter\JsonFormatter::class 以避免引发not found 错误但它仍然创建了两个条目
【解决方案2】:

如果您已使用 LOG_CHANNEL=jsonLOG_CHANNEL 频道更改为您选择的频道,并且您仍在登录其他频道,您还必须编辑默认频道 ('stack') 以仅使用您选择的频道。

来自

    'channels' => [
        'stack' => [
            'driver' => 'stack',
            'channels' => ['single', 'daily'],
            'ignore_exceptions' => false,
        ],
    ...

    'channels' => [
        'stack' => [
            'driver' => 'stack',
            'channels' => ['json'],
            'ignore_exceptions' => false,
        ],
    ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-09
    • 2019-01-22
    • 2014-12-16
    • 2016-08-24
    • 2017-03-01
    • 1970-01-01
    • 2018-07-24
    相关资源
    最近更新 更多