結論
いい加減英語のページを毛嫌いしないで公式ドキュメント読め。
Laravelの軽量フレームワークLumenで、Laravelと同じように設定したらなかなか動かず悲しい思いをしたメモというか懺悔的な。
公式ドキュメントにバッチリ書いているのでハマる人はいないと思いますが、もしいたら参考になればと
Laravel でのログフォーマット設定
編集するファイルはbootstrap/app.php
。
最後にフォーマットを指定する記述を追記します。
//...最後の方
$app->configureMonologUsing(function($monolog) {
$log_level = \Monolog\Logger::DEBUG;
$log_format = '%datetime%,' . getmypid() . ",%level_name%,%message%,%context%,%extra%\n";
$log_date_format = 'Y-m-d H:i:s.u';
$ip = new \Monolog\Processor\IntrospectionProcessor(
$log_level,
[
'Monolog\\',
'Illuminate\\',
]
);
$monolog->pushProcessor($ip);
$monolog->pushHandler($handler = new \Monolog\Handler\StreamHandler(storage_path('logs/laravel.log'), $log_level));
$handler->setFormatter(new Monolog\Formatter\LineFormatter($log_format, $log_date_format , true, true));
});
return $app;
上記の設定で、ログにプロセスIDを、ログの日時をマイクロ秒まで表示させるよう設定できました。
この辺りはちゃんとLaravel日本語の公式ドキュメントに書いています。(参考)
Lumen でのログフォーマット設定
Lumenも追記するのは同じファイル、同じ個所です。
//...最後の方
$app->configureMonologUsing(function($monolog) {
$log_level = \Monolog\Logger::DEBUG;
$log_format = '%datetime%,' . getmypid() . ",%level_name%,%message%,%context%,%extra%\n";
$log_date_format = 'Y-m-d H:i:s.u';
$ip = new \Monolog\Processor\IntrospectionProcessor(
$log_level,
[
'Monolog\\',
'Illuminate\\',
]
);
$monolog->pushProcessor($ip);
$monolog->pushHandler($handler = new \Monolog\Handler\StreamHandler(storage_path('logs/laravel.log'), $log_level));
$handler->setFormatter(new Monolog\Formatter\LineFormatter($log_format, $log_date_format , true, true));
return $monolog;
});
return $app;
同じ設定の修正ですが違う箇所があります。
そうです。最後の
return $monolog;
です。
Laravelと違い、これを返さないとapp('Psr\Log\LoggerInterface')
に値が入らず、ログインスタンスがnullになってしまいます。
しっかりと英語の公式ドキュメントに書いてありました。。。(参考)
これを私は30、40分はまってしまい、Facadeのコードを確認したり、いろいろと調査して時間を浪費しました。
ググって日本語のブログを読んで「書いてねー」って言って次の日本語ブログを検索する、というダメダメエンジニアの習慣から足を洗い、まずしっかりと英語だろうと公式ドキュメント読まなきゃいつまでたってもダメダメエンジニアだな、と痛感しました。
私は中学卒業レベルの英語力しかないので、何とかGoogle翻訳等を駆使して英語に触れていきたいと思います。。。