【发布时间】:2018-06-24 04:07:31
【问题描述】:
我正在使用 Laravel,并尝试使用此 Log 函数记录一些函数输出:
Log::warning("一些消息")
但是如果我想在控制台和日志文件中写入,我需要使用不同的功能写入两次相同的消息,如下所示:
Log::warning("some message") //这适用于日志文件
dump("some message") //这对工匠控制台输出很有用
有一些功能只允许我使用两者之一?
【问题讨论】:
我正在使用 Laravel,并尝试使用此 Log 函数记录一些函数输出:
Log::warning("一些消息")
但是如果我想在控制台和日志文件中写入,我需要使用不同的功能写入两次相同的消息,如下所示:
Log::warning("some message") //这适用于日志文件
dump("some message") //这对工匠控制台输出很有用
有一些功能只允许我使用两者之一?
【问题讨论】:
您可以使用 Laravel 事件来集成此功能,而无需更改您当前记录信息的方式。
为Illuminate\Log\Events\MessageLogged 事件添加一个侦听器,并在您的侦听器中将日志条目输出到控制台如果请求来自控制台——使用runningInConsole()。
Register a new listener 称为MessageLoggedListener,例如:
protected $listen = [
'Illuminate\Log\Events\MessageLogged' => [
'App\Listeners\MessageLoggedListener',
],
];
使用php artisan event:generate 生成您的听众
将事件处理程序添加到您的侦听器:
/**
* 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>");
}
}
就是这样!您现在已准备好测试功能。从控制台命令记录一条消息,例如:
public function handle()
{
Log::error('Hello world! This is an error.');
}
这是您将看到的输出:
$ php artisan command
Hello world! This is an error.
在您的日志文件中,您会看到:
[2018-01-15 16:55:46] local.WARNING: Hello world! This is an error.
您可以通过添加不同的输出样式来改进功能,例如,您可能希望使用error 表示错误,使用info 表示信息。您可以阅读有关设置输出样式的信息 here in the Symfony documentation。
【讨论】: