You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker+Nginx Unit环境下无法获取Laravel日志的问题求助

Laravel在Nginx Unit Docker容器中无日志输出的解决方法

问题场景

基于Laravel的项目部署在集成Nginx Unit的Docker容器并托管于ECS,仅能看到Nginx Unit的启动日志:

2024/03/28 14:41:10 [notice] 55#55 module: php 8.2.16 "/usr/lib/unit/modules/php.unit.so"
2024/03/28 14:41:10 [info] 1#1 controller started
2024/03/28 14:41:10 [notice] 1#1 process 55 exited with code 0
2024/03/28 14:41:10 [info] 57#57 router started
2024/03/28 14:41:10 [info] 57#57 OpenSSL 1.1.1w  11 Sep 2023, 1010117f
2024/03/28 14:41:10 [info] 58#58 "laravel" prototype started
2024/03/28 14:41:10 [info] 59#59 "laravel" application started

无任何Laravel业务日志输出,但使用Sail或artisan serve启动时可正常获取日志:

app-1      |    WARN  local.ERROR: Application is ready (error log) .  
app-1      | 
app-1      |    WARN  local.INFO: Application is ready (info log) .  
app-1      | 
app-1      |    WARN  local.ERROR: Application is ready (error log) .  
app-1      | 
app-1      |    WARN  local.INFO: Application is ready (info log) .  
app-1      | 

排查与解决步骤

1. 检查日志目录权限

Nginx Unit运行用户(通常为unit或www-data)可能没有Laravelstorage/logs目录的写入权限。

  • 进入容器执行权限检查:
    ls -l storage/logs
    
  • 若权限不足,执行授权:
    chown -R unit:unit storage/logs
    chmod -R 755 storage/logs
    
  • 也可在Dockerfile中提前配置权限:
    RUN chown -R unit:unit /var/www/html/storage
    RUN chmod -R 755 /var/www/html/storage
    

2. 确认日志配置路径正确性

检查.env文件中LOG_PATH是否指向容器内的有效路径(默认storage/logs/laravel.log),可临时添加代码验证路径:

// 在路由或控制器中添加
dd(storage_path('logs/laravel.log'));

3. 配置日志输出到标准流

Nginx Unit会收集容器的标准输出/错误流,将Laravel日志定向到这些流即可在容器日志中查看:

  • 修改config/logging.php,添加stdout通道:
    'stdout' => [
        'driver' => 'monolog',
        'handler' => StreamHandler::class,
        'formatter' => env('LOG_STDOUT_FORMATTER', \Monolog\Formatter\LineFormatter::class),
        'with' => [
            'stream' => 'php://stdout',
        ],
        'level' => env('LOG_LEVEL', 'debug'),
    ],
    
  • 在.env中设置:
    LOG_CHANNEL=stdout
    

4. 确保Nginx Unit传递环境变量

检查Nginx Unit的配置文件(如config.json),确保已传递Laravel关键环境变量:

{
    "apps": {
        "laravel": {
            "type": "php",
            "root": "/var/www/html/public",
            "script": "index.php",
            "environment": {
                "APP_ENV": "production",
                "LOG_CHANNEL": "stdout"
            }
        }
    }
}

5. 手动触发日志验证

在路由中添加测试代码,主动触发日志输出:

Route::get('/test-log', function () {
    Log::info('测试日志:来自Nginx Unit环境');
    Log::error('测试错误日志:来自Nginx Unit环境');
    return '日志已发送';
});

访问该路由后,检查容器日志或日志文件是否有对应内容。


内容的提问来源于stack exchange,提问作者Mykyta Orlov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 00:43:10