Php Laravel日志记录无法从作业句柄方法工作

Php Laravel日志记录无法从作业句柄方法工作,php,laravel,permissions,Php,Laravel,Permissions,使用logfacade,我无法从作业的handle方法记录任何内容。使用此facade从控制器或应用程序的其他部分进行日志记录工作正常 我在这里尝试过解决方案:,但它不适用于Laravel6.17,在这里:,但它不会以任何方式影响行为 PHP7.2 拉威尔6.17 APP_ENV=local APP\u LOG\u LEVEL=debug 拉威尔在Docker里面用阿尔卑斯山的图像和其他无关的东西跑步 这是我的工作: class MyJob implements ShouldQueue {

使用
log
facade,我无法从作业的handle方法记录任何内容。使用此facade从控制器或应用程序的其他部分进行日志记录工作正常

我在这里尝试过解决方案:,但它不适用于Laravel6.17,在这里:,但它不会以任何方式影响行为

  • PHP7.2
  • 拉威尔6.17
  • APP_ENV=local
  • APP\u LOG\u LEVEL=debug
  • 拉威尔在Docker里面用阿尔卑斯山的图像和其他无关的东西跑步
这是我的工作:

class MyJob implements ShouldQueue
{
    use Dispatchable;
    use InteractsWithQueue;
    use Queueable;
    use SerializesModels;

    public function handle()
    {
       Log::warning("HI");
    }
}
当我分派if时,作业已正确处理,但在我的
存储/app/logs/laravel.log
中未显示任何内容

此文件和整个文件夹
存储
具有777权限

我在
config/logging.php
中使用“单一”驱动程序:

        'single' => [
            'driver' => 'single',
            'path' => storage_path('logs/laravel.log'),
            'level' => 'debug',
        ],
有什么想法吗

编辑日期:2020年7月17日

根据要求,这里是我的
config.horizon.php

        'single' => [
            'driver' => 'single',
            'path' => storage_path('logs/laravel.log'),
            'level' => 'debug',
        ],

编辑2020年7月20日


当我使用
dipatchNow
方法调用它而不是
dispatch
one时,我可以从同一个作业登录。知道为什么吗?

如果您的队列在主管上运行,您的日志将在主管日志中。如果无法找到队列/主管配置,请共享该配置。
你也可以检查你的docker日志。

你是如何初始化工人的?我不知道你的docker映像,你是否尝试过docker日志许多docker映像将默认日志文件重定向到stderr。。。因此,如果您以php artisan队列的形式运行worker,那么可能会涉及到不相关的内容:work,如果您修改配置,则需要重新启动它。您使用的是什么队列连接(驱动程序)?我在这里使用@DannyEbbers,我认为这是docker配置问题。我会检查以确保您正在使用应用程序/存储作为容器的共享卷。谢谢大家@DannyEbbers、Kurt Friars和N69S,让我试试您的建议,如果有结果,我会告诉您。我使用Horizon来获取worker运行,因此我使用
php artisan Horizon
启动workers。我认为horizon负责重新启动workers,但我会尝试手动重新启动它。队列连接是
redis
,也是
rabbitmq
,具体取决于作业。但他们都不记录任何东西。谢谢你@sykez。我现在不是主管,因为我只是在当地为发展工作。我只是从project container启动了
php artisan horizon
,并将此过程保持在终端的前台。我检查了docker日志,但只得到http调用,没有自定义消息或php异常。“我会继续找的。”维托里奥,我明白了。很抱歉,回复太晚了。您是否能够确认已执行分派的作业?在运行horizon或horizon仪表板的前台终端上是否看到任何输出?另外,您的作业是如何调度的,通过tinker、http请求、cron/schedule调用的?我假设您的
QUEUE\u驱动程序已设置为
redis
,对吗?如果您最近更改了这一点,可能需要使用
php-artisan-config:clear
清除缓存。使用
dipatchNow
时,基本上它是同步运行的(就像同步驱动程序一样)。谢谢@sykez。是的,我可以确认我调度的作业已执行,因为Horizon会在“最近的作业”部分显示它们,并且我会在数据库中看到预期的结果(该作业会在数据库中执行一些更新)。是的,我从地平线上看到终端上的输出(比如“正在处理我的作业……已处理的我的作业”,等等)。当我从作业中导出var_dump时,我会在终端中获得输出(与horizon运行的TTY相同)。出于测试目的,我通过一个简单的API调用分派作业,也就是通过http请求分派作业。但是当我从smw其他地方发送它们时,我得到了相同的结果。是,队列驱动程序设置为“redis”。@vittorio我明白了。我建议设置主管运行您的地平线。我相信这可能会有帮助:)好吧@sykez,我会试试你的建议。现在,我还在本地。一旦我和主管一起开始生产,我会看看是否有变化。如果是的话,我会把你的回答标记为接受。谢谢你的帮助。