首先,我为这个复杂的标题感到抱歉,但是我找不到其他合适的标题来表示错误。
我用Laravel 4做我的项目。
我的global.php文件中有一个global.php。
Log::listen(function($level, $message, $context){
switch($level){
case 'info':
Log::useFiles(storage_path().'/logs/laravel.info.log');
break;
case 'error':
Log::useFiles(storage_path().'/logs/laravel.error.log');
break;
}
});当我运行这段代码时
for($i = 1; $i <= 5; $i++){
Log::info($i);
}它的输出是
[2015-04-15 11:54:07] production.INFO: 1 [] []
[2015-04-15 11:54:07] production.INFO: 2 [] []
[2015-04-15 11:54:07] production.INFO: 2 [] []
[2015-04-15 11:54:07] production.INFO: 3 [] []
[2015-04-15 11:54:07] production.INFO: 3 [] []
[2015-04-15 11:54:07] production.INFO: 3 [] []
[2015-04-15 11:54:07] production.INFO: 4 [] []
[2015-04-15 11:54:07] production.INFO: 4 [] []
[2015-04-15 11:54:07] production.INFO: 4 [] []
[2015-04-15 11:54:07] production.INFO: 4 [] []
[2015-04-15 11:54:07] production.INFO: 5 [] []
[2015-04-15 11:54:07] production.INFO: 5 [] []
[2015-04-15 11:54:07] production.INFO: 5 [] []
[2015-04-15 11:54:07] production.INFO: 5 [] []
[2015-04-15 11:54:07] production.INFO: 5 [] []我发现,当我移除Log::listen并简单地添加Log::useFiles(storage_path().'/logs/laravel.log');时,问题就解决了。
我必须使用侦听器和for循环。
任何帮助都是非常感谢的。
提前谢谢你。
发布于 2015-04-15 12:47:36
问题是,每个Log::userFiles()调用都向堆栈添加了一个新的处理程序。如果您有2、3、4个处理程序,那么相同的消息将被写入2、3、4次。
我不确定这是否是一个好方法,但它应该有效:
(事实上,我几乎肯定会有更好的方法,但我无法马上找到)
Log::listen(function($level, $message, $context){
$monolog = Log::getMonolog();
// clear all existing log handlers
for($i=0; $i<count($monolog->getHandlers()); $i++){
$monolog->popHandler();
}
Log::useFiles(storage_path().'/logs/laravel.' . $level . '.log');
});如您所见,通过直接使用文件名中的级别,我还使开关大小写过时了。
https://stackoverflow.com/questions/29645864
复制相似问题