LoginSignup
6

More than 5 years have passed since last update.

Laravel/Lumenでログフォーマット変更

Last updated at Posted at 2017-10-23

結論

いい加減英語のページを毛嫌いしないで公式ドキュメント読め。
Laravelの軽量フレームワークLumenで、Laravelと同じように設定したらなかなか動かず悲しい思いをしたメモというか懺悔的な。

公式ドキュメントにバッチリ書いているのでハマる人はいないと思いますが、もしいたら参考になればと

Laravel でのログフォーマット設定

編集するファイルはbootstrap/app.php
最後にフォーマットを指定する記述を追記します。

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も追記するのは同じファイル、同じ個所です。

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 $monolog;
});

return $app;

同じ設定の修正ですが違う箇所があります。
そうです。最後の

 return $monolog;

です。
Laravelと違い、これを返さないとapp('Psr\Log\LoggerInterface')に値が入らず、ログインスタンスがnullになってしまいます。

しっかりと英語の公式ドキュメントに書いてありました。。。(参考
 

これを私は30、40分はまってしまい、Facadeのコードを確認したり、いろいろと調査して時間を浪費しました。
ググって日本語のブログを読んで「書いてねー」って言って次の日本語ブログを検索する、というダメダメエンジニアの習慣から足を洗い、まずしっかりと英語だろうと公式ドキュメント読まなきゃいつまでたってもダメダメエンジニアだな、と痛感しました。

私は中学卒業レベルの英語力しかないので、何とかGoogle翻訳等を駆使して英語に触れていきたいと思います。。。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6