Laravel Monolog Syslog指定单独的日志文件?

时间:2015-02-18 18:45:03

标签: laravel syslog monolog

我有Laravel设置,因此Monolog会记录到syslog。这是什么'在我的start/global.php

$monolog = Log::getMonolog();
$monolog->pushHandler(new Monolog\Handler\SyslogHandler('mywebsitename'));

这很有效,除了所有日志消息都被转储到/var/log/messages

如何指定特定的日志文件而不是messages?我已经看到了一些名为custom" channels"与Monolog。这与它有关吗?

另外,如何确保此日志文件像其他日志文件一样旋转?

1 个答案:

答案 0 :(得分:0)

我正在使用Laravel 4.2,在我的setLog函数中,我添加了RotatingFileHandler。这将为您解决这两个问题。

此代码在app / storage / logs / import /中创建一个名为mttParser- {Y-m-d} .log的文件,其中{Y-m-d}将转换为今天的日期。 RotatingFileHandler的第二个参数10设置为在删除之前保留10个版本的日志文件。

IntrospectionProcessor只是添加方法,类,行号,以及调用日志的位置。

trait LogTrait
{
    /**
     * @var string The location within the storage path to put the log files
     */
    protected $logFileLocation = 'logs/import/';

    protected $logFileName = 'mttParser.log';

    /**
     * @var Logger
     */
    protected $log;

    /**
     * Returns a valid log file, re-using an existing one if possible
     *
     * @return \Monolog\Logger
     */
    public function getLog()
    {
        // Set a log file
        if (!isset( $this->log )) {
            $this->setLog();
        }

        // If it's been set somewhere else, re-create it
        if ('Monolog\Logger' !== get_class( $this->log )) {
            $this->setLog();
        }

        return $this->log;
    }

    /**
     * Sets the log file
     */
    public function setLog()
    {
        $this->log = new Logger( 'mttParserLog' );
        // Make sure our directory exists
        if (!File::isDirectory( storage_path( $this->logFileLocation ) )) {
            File::makeDirectory( storage_path( $this->logFileLocation ) );
        }

        $this->log->pushHandler( new RotatingFileHandler( storage_path( $this->logFileLocation . $this->logFileName ),
            10 ) );
        $this->log->pushProcessor( new IntrospectionProcessor() );
    }
}