【发布时间】:2013-12-29 11:23:24
【问题描述】:
我又遇到了更多 Laravel 问题,因为我在理解事物时遇到了问题。
我再次尝试创建一个包来进行我自己的日志记录。在做了一些额外的阅读和阅读核心代码并尝试了其他方法之后,我得出的结论是,我需要做的就是扩展 laravel 日志记录的核心功能,以便它使用 a 记录到不同的路径自定义格式化程序。
我已经创建了我的包。这是我的服务提供者类:
use Illuminate\Log\LogServiceProvider;
class VmlogServiceProvider extends LogServiceProvider {
/**
* Bootstrap the application events.
*
* @return void
*/
public function boot()
{
App::bind('log', function()
{
return new Vm\Vmlog\Vmlog;
});
parent::boot();
}
}
?>
这是 VmLog 类
<?php namespace Vm\Vmlog;
use App;
use Illuminate\Support\ServiceProvider;
use Log;
use Monolog\Formatter\LineFormatter;
use Monolog\Handler\StreamHandler;
use Monolog\Handler\RotatingFileHandler;
class Vmlog extends \Illuminate\Log\Writer {
protected $path;
protected $formatter;
protected $stream;
protected $rotatingStream;
public function __construct() {
$output = APP_HOST."|%datetime%|%level%|%level_name%|".__METHOD__."|%message%|%context%".PHP_EOL;
$this->path = VM_LOGPATH.APP_VLCODE."/".APP_VLCODE."_".APP_INSTANCE.".log";
$this->formatter = new LineFormatter($output, $dateFormat);
parent::__construct();
}
/**
* Register a file log handler.
*
* @param string $path
* @param string $level
* @return void
*/
public function useFiles($path, $level = 'debug')
{
$level = $this->parseLevel($level);
$this->stream = new StreamHandler($this->path, $level);
$this->stream->setFormatter($this->formatter);
$this->monolog->pushHandler($this->stream);
}
/**
* Register a daily file log handler.
*
* @param string $path
* @param int $days
* @param string $level
* @return void
*/
public function useDailyFiles($path, $days = 0, $level = 'debug')
{
$level = $this->parseLevel($level);
$this->rotatingStream = new RotatingFileHandler($this->path, $days, $level);
$this->rotatingStream->setFormatter($this->formatter);
$this->monolog->pushHandler($this->rotatingStream);
}
}
?>
我已经在 app.php 中注释掉了 LogServiceProvider,并在我的 VmlogServiceProvider 中添加了它。
然而,当我尝试运行时,我收到以下错误。
调用未定义的方法 Illuminate\Support\Facades\Log::useDailyFiles()
我不明白为什么会这样。根据文档(我认为),我已经删除了核心 LogServiceProvider,我已经在其中添加了我自己的并正确绑定了它。我在这里做错了什么?
【问题讨论】:
-
这是 Laravel 4.0 还是 4.1?
-
Laravel 4.0,但我认为我们需要切换,因为我们仍在开发基础项目。