🙌

Laravelで任意の場所にログを出し分けしてみる

2021/06/14に公開

はじめに

LaravelでCSVを介して外部連携するアプリを開発しており、その機能の部分だけ監視する運用を検討する必要がありました。
具体的には、CSV機能だけは標準と別なログファイルに出力させたくなりました。

なので、Laravelのロギングで標準の仕組み(monolog)は使いたいけど、一部のログはlogs/laravel.log 以外の場所に出力する、というのをやってみました

やってみたこと

準備

  • Laravelのプロジェクトを作成
$ composer create-project laravel/laravel laravel-csv

ログのチャンネルを追加

  • logging.phpのchannels内にsingleのドライバで適当な名前のチャンネルを追加
config/logging.php
    'channels' => [
  ︙
	'origin' => [
            'driver' => 'single',
            'path' => storage_path('logs/origin.log'),
        ],
    ],
];

ログを発生させる処理を追加

  • /err にアクセスしたら適当なログを発生させる処理を作成
routes/web.php
use Illuminate\Support\Facades\Log;Route::get('/err', function () {
    Log::channel('origin')->emergency('Something happened!');
    print("ログを出力しました");
});

動かしてみる

  • ログファイルの確認
    始めは何もありません。
$ ls storage/logs/
$ 
  • サーバ起動
$ php artisan serve
  • アクセスしてみる
    /err にアクセスすると、特にエラーもなく画面表示が行われます

ログファイルが出力されています

$ ls storage/logs/
origin.log
$ cat storage/logs/origin.log 
[2021-06-12 22:31:06] local.EMERGENCY: Something happened!  

参考

Discussion