使用工匠输出记录 Laravel

Ser*_*osa 4 php laravel

我正在使用 Laravel,我试图用这个 Log 函数记录一些函数输出:

日志::警告(“一些消息”)

但是如果我想在控制台和日志文件中写入,我需要用不同的功能编写两次相同的消息,如下所示:

Log::warning("some message") //这对日志文件很有用

dump("some message") //这对工匠控制台输出很有用

有一些功能允许我只使用两者之一吗?

sam*_*sam 7

您可以使用 Laravel 事件来集成此功能,而无需更改您当前记录信息的方式。

添加Illuminate\Log\Events\MessageLogged事件的侦听器,如果请求来自控制台,在侦听器中将日志条目输出到控制台 - 使用runningInConsole()

  1. 注册一个名为的新侦听器MessageLoggedListener,例如:

    protected $listen = [
        'Illuminate\Log\Events\MessageLogged' => [
            'App\Listeners\MessageLoggedListener',
        ],
    ];
    
    Run Code Online (Sandbox Code Playgroud)
  2. 生成你的听众 php artisan event:generate

  3. 将事件处理程序添加到您的侦听器:

    /**
    * Handle the event.
    *
    * @param  MessageLogged  $event
    * @return void
    */
    public function handle(MessageLogged $event)
    {
        if (app()->runningInConsole()) {
            $output = new ConsoleOutput();
            $output->writeln("<error>{$event->message}</error>");
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

就是这样!您现在已准备好测试该功能。从控制台命令记录一条消息,例如:

    public function handle()
    {
        Log::error('Hello world! This is an error.');
    }
Run Code Online (Sandbox Code Playgroud)

这是您将看到的输出:

$ php artisan command
Hello world! This is an error.
Run Code Online (Sandbox Code Playgroud)

在您的日志文件中,您将看到:

[2018-01-15 16:55:46] local.WARNING: Hello world! This is an error.
Run Code Online (Sandbox Code Playgroud)

您可以通过添加不同的输出样式来改进功能,例如您可能希望error用于错误和info信息。您可以在 Symfony 文档 中阅读有关设置输出样式的信息