デフォルトの設定
- デフォルト設定のままだと、「ルート/storage/logs」配下に
lumen.logが吐かれる。
全てのログがこの1ファイルにずっと吐き続けられる。
laravelの設定
- 「ルート/config/app.php」のlog(キー値)に対して設定してあげると
rotateの制御をしてくれるみたい。
lumenでの対応
やりたいこと
- 日付単位でrotateさせたい
- ログを今後管理するのを考えた時に、日付はファイル名に付加しないで日付のディレクトリを配置して、その下に吐かれるようにしたい
対応方法
- 「ルート/app」直下にApplication.php(以下のファイル)を作成
<?php
namespace App;
use Monolog\Logger;
use Laravel\Lumen\Application as LumenApplication;
use Monolog\Handler\StreamHandler;
use Monolog\Formatter\LineFormatter;
use Monolog\Handler\NewRelicHandler;
use Monolog\Handler\RotatingFileHandler;
class Application extends LumenApplication
{
/**
* Register container bindings for the application.
*
* @return void
*/
protected function registerLogBindings()
{
$this->singleton('Psr\Log\LoggerInterface', function () {
return new Logger('lumen', $this->getMonologHandler());
});
}
/**
* Extends the default logging implementation with additional handlers if configured in .env
*
* @return array of type \Monolog\Handler\AbstractHandler
*/
protected function getMonologHandler()
{
$errorLogger = new RotatingFileHandler(storage_path("logs/{date}/error.log"), 0, Logger::ERROR, false);
$infoLogger = new RotatingFileHandler(storage_path("logs/{date}/info.log"), 0, Logger::INFO, false);
$handlers = [];
$handlers[] = $this->setLoggerFileFormat($errorLogger);
$handlers[] = $this->setLoggerFileFormat($infoLogger);
return $handlers;
}
/**
* Loggerのファイル名と日付フォーマットを設定
*
* @param $logger
* @return mixed
*/
private function setLoggerFileFormat($logger) {
$logger->setFilenameFormat('{filename}', 'Ymd');
$logger->setFormatter(new LineFormatter(null, null, true, true));
return $logger;
}
}
- 「ルート/bootstrap/app.php」の中で$appのインスタンス生成しているところを
作成したApplication.phpを生成するように変更
$app = new App\Application(
realpath(__DIR__.'/../')
);
参考URL
laracasts.com