如何将信息,错误,警告,紧急错误写入不同的文件而不是laravel.log

时间:2018-12-24 13:51:21

标签: laravel

基本上,我现在在logging.php中拥有这个

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

但是这样做是每次我写任何类型的错误(紧急,调试,信息等)时,所有错误都将写入此文件中。

我需要的是将不同类型的错误类型拆分为不同类型的文件,并且所有这些都必须每天使用。这将是我需要的最终结构。

\storage
            \logs
                \info
                    laravel-24-04-18.log
                    laravel-25-04-18.log
                \error
                    laravel-24-04-18.log
                    laravel-25-04-18.log

                \emergency
                    laravel-24-04-18.log
                    laravel-25-04-18.log

我搜索太多了。我找到了很多解决方案,但是从那时起,laravel发生了很大变化,以至于没有任何解决方案对我有用。我正在使用5.7 laravel。

1 个答案:

答案 0 :(得分:0)

说明

从阅读您的问题开始,我认为您需要为每个要写入的单独日志文件使用不同的日志记录通道。唯一的问题是,您只能在配置日志记录通道时指定最低日志级别。在您的情况下,它设置为debug意味着任何具有调试级别或更高级别的内容都将被发送到通道。

laravel文档中的示例

'channels' => [
    'stack' => [
        'driver' => 'stack',
        'channels' => ['syslog', 'slack'],
    ],

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

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

根据我们的配置,syslog通道会将消息写入系统日志;但是,由于错误消息不是关键信息或不重要信息,因此不会将其发送到Slack。但是,如果我们记录紧急消息,则由于紧急级别高于两个通道的最低级别阈值,该消息将同时发送到系统日志和Slack。

解决方案1 ​​

您的问题的一种解决方案是编写以配置多个日志记录通道,然后像这样直接写入每个记录通道:

Log::channel('slack')->info('Something happened!');

通过这种方式,日志消息不会发送到其他渠道中。

解决方案2

或者,您可以向每个通道添加一个FilterHandler,这将允许您指定最小和最大日志级别。

有关配置频道处理程序的更多信息,请参见https://laravel.com/docs/5.8/logging#creating-monolog-handler-channels

可以在以下位置找到有关设置FilterHandler的信息:https://stackoverflow.com/a/52310813/7528944