🙌
Laravelで任意の場所にログを出し分けしてみる
はじめに
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!
参考
- ログ 5.6 Laravel https://readouble.com/laravel/5.6/ja/logging.html
Discussion