ハマログ

株式会社イーツー・インフォの社員ブログ

Laravelのログファイル分割

Laravelのログは、デフォルトでstorage/logs/laravel.logに出力されます。
コマンドの実行ログもウェブアプリの実行ログもすべて同じファイルに出力されます。

config/app.phpの以下の設定で、日付単位の出力や出力ログレベルの指定ができます。

// ログ種別。単一(single)、日別(daily)、システムログ(syslog)、エラーログ(errorlog)
'log' => env('APP_LOG', 'daily'),
// dailyの場合、ログを保有する日数
'log_max_files' => '90',
// ログレベル
'log_level' => env('LOG_LEVEL', 'info'),

今回、コマンドのログを別のファイルに出力したかったのですが、フレームワークが標準で対応していないためやりかたを考えました。

まず、コマンドのデフォルトコンストラクタにLog::useFilesを書いてみました。
が、複数のコマンドで記載したところ、意図したファイルとは別の箇所にログが出力されるという結果に。

public function __construct()
{
    parent::__construct();
    Log::useFiles(storage_path() . '/logs/console/command_signature_here.log');
}

Http/Kernel.phpとConsole/Kernel.phpのbootstrappersにIlluminate\Foundation\Bootstrap\ConfigureLoggingの呼び出しがあり、共通のインスタンスが利用されているようです。
つまり、Log::useFilesを呼び出した後は、アプリケーション内すべてのログが指定したファイルに出力されるようになってしまいます。

ということで、標準関数で対応するのをやめて、Monologで書きました。LaravelのログはMonologのラッパーなので、ライブラリをインストールをしなくてもそのまま利用することができます。

まず、useします

use Monolog\Logger;
use Monolog\Handler\StreamHandler;

続いてインスタンス変数を作って

protected $log;

コンストラクタに初期化コードを記載

public function __construct()
{
    parent::__construct();

    $this->log = new Logger($this->signature);
    $this->log->pushHandler(new StreamHandler(storage_path() . '/logs/console/command_signature_here.log', config('app.log_level')));
}

ログを出力します。

$this->log->addInfo('日次データ作成処理を開始しました');

できました!

20161005-165912

でました!

[2016-10-05 16:58:57] command:name INFO: 日次データ作成処理を開始しました [] []

Laravel側でログを日別にする場合は、RotatingFileHandlerを利用します。

use Monolog\Handler\RotatingFileHandler;

// (略)

$this->log->pushHandler(new RotatingFileHandler(storage_path() . '/logs/console/command_signature_here.log', config('app.log_max_files'), config('app.log_level')));

わけたらわけたで全体を時系列で追っかけるのが難しくなる場合があるため、難しいですがいろいろ考えて設計しましょう。

以上

LaravellogMonologPHPログローテーション分割

  kaneko tomo   2016年10月5日


関連記事

eclipseではまってしまったこと

きっかけ そもそもの始まりはjavaをアップデートしようと思ったのがきっかけでご…

自動コードフォーマットは悪・・・?

コードを綺麗に保つ為に、普段から意識して書くのはもちろん、ツールを使ってフォーマ…

PhpStorm & Docker (for Mac)でデバッグ

前回はPhpStorm&Vagrantの組み合わせでXdebugによるデ…


← 前の投稿

次の投稿 →