Logging not working in laravel queue job

时间:2016-08-31 17:42:22

标签: logging laravel-5 queue jobs

I have the below settings in my supervisor/conf.d/myconf.conf file :

[program:my-worker]    
process_name=%(program_name)s_%(process_num)02d    
command=php /var/www/html/artisan queue:work sqs --queue=my_queue_name --tries=3 --daemon    
autostart=true    
autorestart=true    
user=root    
numprocs=1    
redirect_stderr=true    
stdout_logfile=/var/www/html/storage/logs/mylogfile.log

I have give all permissions to storage/logs/mylogfile.log file. Not able to figure out why is it still not logging,

3 个答案:

答案 0 :(得分:15)

我猜您使用的是每日日志。

当我们有单个日志文件时,我们有一个日志文件:" laravel.log "我们给予完全许可[777], 所以我们能够记录并且一切都按预期工作。

但是当我们选择每日文件时,每当laravel应用程序需要记录某些内容时,它将创建一个新文件。 现在该文件的所有者是Web服务器(守护程序/ www-root ),因为laravel由用户守护程序/ www-root 运行。

在处理队列时,操作中的用户是" cli ",并且它没有写入此文件的权限。所以它抛出异常并且处理停止。

如果您使用每日日志,我建议您做的是更改单一设置,以便为不同的用户创建不同的日志文件。

将此代码添加到bootstrap/app.php

/**
 * Configure Monolog.
 */
$app->configureMonologUsing( function( Monolog\Logger $monolog) {
    $processUser = posix_getpwuid( posix_geteuid() );
    $processName= $processUser[ 'name' ];

    $filename = storage_path( 'logs/laravel-' . php_sapi_name() . '-' . $processName . '.log' );
    $handler = new Monolog\Handler\RotatingFileHandler( $filename );
    $monolog->pushHandler( $handler );
});

在重新启动应用之前。

现在您也将拥有cli的日志文件,并且与该队列相关的所有内容都将记录在该文件中。

这也可以保持日志文件的清洁。 HTTP应用程序日志将位于不同的文件中,队列处理日志将位于不同的文件中。

另外请不要忘记执行以下命令。

  

确保正确加载新配置

php artisan config:clear
  

当您使用supervisor守护程序队列工作程序时,您将需要广播队列重启信号。

php artisan queue:restart

希望这有帮助。

答案 1 :(得分:5)

根据@PrabhatRai的回答,这是另一个看起来更像是Laravel默认行为的配置示例。

将此代码添加到bootstrap/app.php

$app->configureMonologUsing(function (Monolog\Logger $monolog) {
    $filename = storage_path('logs/' . php_sapi_name() . '-' . posix_getpwuid(posix_geteuid())['name'] . '.log');
    $monolog->pushHandler($handler = new Monolog\Handler\RotatingFileHandler($filename, 30));
    $handler->setFilenameFormat('laravel-{date}-{filename}', 'Y-m-d');
    $handler->setFormatter(new \Monolog\Formatter\LineFormatter(null, null, true, true));
});
  • 它会存储这样的文件:laravel-2017-03-27-cli-raph.loglaravel-2017-03-27-fpm-cgi-raph.log,更具可读性。
  • 保留新行(默认Laravel行为)
  • 适用于Laravel Log Viewer

答案 2 :(得分:0)

为解决此问题,我做了以下工作:

  1. 设置存储目录及其所有子目录的组ID。在该目录中创建的每个文件都将www-data作为组。

    sudo chgrp -r www-data storage
    sudo chmod +R g+s storage
    
  2. 将运行脚本的<user>添加到组www-data

    sudo usermod -a -G www-data user