【问题标题】:Laravel Logging - Monolog stderr ignores logLevelLaravel 日志记录 - Monolog stderr 忽略 logLevel
【发布时间】:2025-12-31 23:10:02
【问题描述】:

我在 docker 容器中使用 laravel 5.7。 我的目标是将错误日志直接写入 stderr 而不是 laravel.log

logging.php

<?php
return [

'default' => env('LOG_CHANNEL', 'stack'),
'channels' => [
        'stack' => [
            'driver' => 'stack',
            'channels' => ['stderr'], //before it was stderr
        ],

        'single' => [
            'driver' => 'single',
            'path' => storage_path('logs/laravel.log'),
            'level' => 'error',
        ],
//...
        'stderr' => [
            'driver' => 'monolog',
            'handler' => StreamHandler::class,
            'level' => 'error',
            'with' => [
                'stream' => 'php://stderr',
            ],
        ],
//...
    ],
];

日志目标本身正在工作 - laravel.log 是空的 - 但似乎日志级别被忽略了。在 docker 日志中,我还收到了调试消息

docker-compose logs --tail=100 container
...
ESC[36mcontainer_1         |ESC[0m [2019-07-01 09:57:51] local.DEBUG: ...
...

如果我只是将 channels (stack) 从 stderr 更改为 single,则日志(但只有​​错误级别)会正确附加到 laravel.log

【问题讨论】:

    标签: laravel laravel-5


    【解决方案1】:

    将'level'放在'with'属性中,因为with属性会被传递给StreamHandler构造函数

    'stderr' => [
            'driver' => 'monolog',
            'handler' => StreamHandler::class,
            'with' => [
                'stream' => 'php://stderr',
                'level' => 'error',
            ],
        ],
    

    【讨论】: