日志记录在 laravel 队列作业中不起作用
Logging not working in laravel queue job
我的 supervisor/conf.d/myconf.conf 文件中有以下设置:
[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
我已授予 storage/logs/mylogfile.log 文件的所有权限。
无法弄清楚为什么它仍然没有记录,
我猜你正在使用每日日志。
当我们有单个日志文件时,我们有一个日志文件:“laravel.log”,我们授予完全权限 [777],
所以我们能够登录并且一切都按预期工作。
但是当我们选择每日文件时,每天 laravel 应用程序都会在需要记录某些内容时创建一个新文件。
现在这个文件的所有者是网络服务器 (daemon/www-root) 因为 laravel 是 运行 用户 daemon/www-root .
处理队列时,操作中的用户是“cli”,它没有写入此文件的权限。所以它抛出异常并且处理停止。
如果您使用每日日志,我建议您更改 monolog 设置,以便为不同的用户创建不同的日志文件。
将此代码添加到 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 应用程序日志将在不同的文件中,队列处理日志将在不同的文件中。
另外请不要忘记运行以下命令。
To make sure new config is loaded correctly
php artisan config:clear
As you are using supervisor daemon queue worker, so you will need to broadcast the queue restart signal.
php artisan queue:restart
希望对您有所帮助。
根据@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.log
和 laravel-2017-03-27-fpm-cgi-raph.log
更具可读性。
- 保留新行(默认 Laravel 行为)
- 它适用于 Laravel 日志查看器
为了解决这个问题,我做了以下工作:
设置存储目录及其所有子目录的组id。在此目录中创建的每个文件都将 www-data 作为组。
sudo chgrp -r www-data storage
sudo chmod +R g+s storage
添加 <user>
运行 脚本到组 www-data
sudo usermod -a -G www-data user
我的 supervisor/conf.d/myconf.conf 文件中有以下设置:
[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
我已授予 storage/logs/mylogfile.log 文件的所有权限。 无法弄清楚为什么它仍然没有记录,
我猜你正在使用每日日志。
当我们有单个日志文件时,我们有一个日志文件:“laravel.log”,我们授予完全权限 [777], 所以我们能够登录并且一切都按预期工作。
但是当我们选择每日文件时,每天 laravel 应用程序都会在需要记录某些内容时创建一个新文件。 现在这个文件的所有者是网络服务器 (daemon/www-root) 因为 laravel 是 运行 用户 daemon/www-root .
处理队列时,操作中的用户是“cli”,它没有写入此文件的权限。所以它抛出异常并且处理停止。
如果您使用每日日志,我建议您更改 monolog 设置,以便为不同的用户创建不同的日志文件。
将此代码添加到 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 应用程序日志将在不同的文件中,队列处理日志将在不同的文件中。
另外请不要忘记运行以下命令。
To make sure new config is loaded correctly
php artisan config:clear
As you are using supervisor daemon queue worker, so you will need to broadcast the queue restart signal.
php artisan queue:restart
希望对您有所帮助。
根据@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.log
和laravel-2017-03-27-fpm-cgi-raph.log
更具可读性。 - 保留新行(默认 Laravel 行为)
- 它适用于 Laravel 日志查看器
为了解决这个问题,我做了以下工作:
设置存储目录及其所有子目录的组id。在此目录中创建的每个文件都将 www-data 作为组。
sudo chgrp -r www-data storage sudo chmod +R g+s storage
添加
<user>
运行 脚本到组 www-datasudo usermod -a -G www-data user