 
				2017/2/1
不具合があったので『Laravel 5.1 でログ出力、それから (ログメールドライバー動作不良対処、クエリ出力の調整)』のほうを見て下さい
Laravel Framework version 5.1.35 (LTS) についての記事です。
muraveです。あんまりにもあんまりな記事(「PHP カンファレンス福岡 2016 で思ったこと」)を上げて反省しましたのでPHPお役立ち記事を書きたいと思います。
CLIコマンドを作ることができるフレームワーク、CakePHPなどもですが、ログ出力時にWebとCLIで実行したユーザーが異なり、権限がらみのエラーが発生したりしがちです。
そもそもログを調べる時、WebとCLIは別ファイルになってた方が良くないです?
ということでログファイルを分ける方法を考えていたのですが、実行ユーザー名でログファイルを作ればいいと気がつきました。まぁ、nginxやapacheユーザーでCLIを扱うと混ざっちゃいますが。
よ~し、おっちゃん、実行ユーザー名からファイル名を決めるインスタンスを作ってloggerを差し替えちゃぞ~
ついでにextraに呼び出し元情報を追加し(参考:「Laravelのログにファイル名やメソッド名を出力する」)、日毎のファイル作成(RotatingFileHandlerベース)にしましょう。
class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        $this->app->instance('log', new \Illuminate\Log\Writer(
                (new \Monolog\Logger(
                    $this->app->environment()
                ))->pushProcessor(
                    new \Monolog\Processor\IntrospectionProcessor(
                        \Monolog\Logger::DEBUG,
                        [
                            'Monolog\\',
                            'Illuminate\\',
                            //他、呼び出し元としてはスキップしたい対象を設定,
                        ]
                    )
                )->pushHandler(
                    new \Monolog\Handler\RotatingFileHandler(
                        $this->app->storagePath() . '/logs/' . posix_getpwuid(posix_geteuid())['name'] . '.log',
                        \Config::get('app.log_max_files', 5)
                    )
                )
            )
        );
    }
// 以下略
bootstrapのapp.php内で設定しようとしたらenv関係でエラーが出たので上記のようにAppServiceProviderのboot()で差し替えていますが、もっと適切な場所があるのでは?というのが気になるところ。
もっとスマートな方法があったら助言いただけるとうれしいなぁ。
2016/07/20 『Laravel 5.1 でログ出力、その後 (出力レベル設定、クエリ出力)』というその後の機能拡張の話を書きました。




 
												タグ: Laravel