gpt4 book ai didi

日志记录在 Laravel 队列作业中不起作用

转载 作者:行者123 更新时间:2023-12-04 05:21:57 25 4
gpt4 key购买 nike

我的 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 应用程序每天都会在需要记录某些内容时创建一个新文件。
现在这个文件的所有者是 web 服务器( daemon/www-root )因为 laravel 是由用户 运行的守护进程/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

希望这可以帮助。

关于日志记录在 Laravel 队列作业中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39255883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com