頑張って投稿しようと思うがなかなか続かないせぃゆーです。
今日はlaravelのログの使い方をやっと理解したので、メモがてら残します。
laravelの使い方は前から勉強していて、Eloquentや直前の入力を出力するold関数なんかは、今仕事で使っているフレームワークには存在しないので、私の中では魅力的だった。
ただ、ログだけが使い方がわからなかった。
laravelはデフォルトではシングルログか日付ローテーションログしかない。
仕事では決済をつなぐことが多く、そのAPIのログを一つのファイルに書かれると後でもう何がなんだかわからなくなってしまう。
そのため、決済1用のログ、決済2用のログといった感じで複数ファイルでログを出力したかったが、今まで使い方がわからなかった。
今回のリポジトリ
https://github.com/seiyu-nico/laravel-custom-log/
logging.phpの編集
logging.phpにカスタムログの設定を追加
'channels' => [
'stack' => [
'driver' => 'stack',
'channels' => ['daily'],
'ignore_exceptions' => false,
],
'custom1' => [
'driver' => 'custom',
'via' => App\Logging\CreateCustom1Logger::class,
'path' => storage_path('logs/custom1.log'),
'level' => 'debug',
'days' => 14,
],
'custom2' => [
'driver' => 'custom',
'via' => App\Logging\CreateCustom2Logger::class,
'path' => storage_path('logs/custom2.log'),
'level' => 'debug',
'days' => 14,
],
custom1 | キーの値はログを書くときのチャンネル名 |
driver | customを指定 |
via | Monologのインスタンスを生成するためのクラスを指定 |
path | ログを出力するパス |
level | ログを出力するレベル |
days | ログを保持する期間 |
カスタムログ用のmonologインスタンスを生成するクラスの作成
app/Logging/CreateCustom1Logger.phpを作成
<?php
namespace App\Logging;
use Monolog\Logger;
use Monolog\Handler\RotatingFileHandler;
use Monolog\Formatter\LineFormatter;
class CreateCustom1Logger
{
const dateFormat = 'Y/m/d H:i:s';
/**
* カスタムMonologインスタンスの生成
*
* @param array $config
* @return \Monolog\Logger
*/
public function __invoke(array $config)
{
// monologが理解できるlevel表記に変更
$level = Logger::toMonologLevel($config['level']);
// ルーティング設定
$hander = new RotatingFileHandler($config['path'], $config['days'], $level);
// ログのフォーマット指定
// ここでは指定(null)しないが、1つ目の引数にログのformatを指定することも可能
$hander->setFormatter(new LineFormatter(null, self::dateFormat, true, true));
// ログ作成 Custom1はログに表記される
$logger = new Logger('Custom1');
$logger->pushHandler($hander);
return $logger;
}
}
クラス名やロガー名は都度適切な名前に変更してください
設定はこれだけで完了です。(これだけなのに今までわからなかった・・・)
あとはログを書き方ところで「Log::channel(‘custom1’)->info($message);」をすればいい
custom1の部分はlogging.phpに設定したキーにする
ここでは/logにアクセスしたらログを書くプログラムがあったとします
public function index()
{
Log::info('ログ');
Log::channel('custom1')->info('custom1');
Log::channel('custom1')->debug('!!!!!');
Log::channel('custom2')->info('custom2');
Log::channel('custom2')->debug('!!!!!');
echo 'ログを書きました';
exit;
}
ここにアクセスしたときのログは下記のようになります


それぞれの名前+日付ログが出来上がっていて、それぞれ書かれていますね。
まとめ
今回のリポジトリ
https://github.com/seiyu-nico/laravel-custom-log/
これでやっとlaravelを使える。
仕事で使うにはまだまだ弊害があるけど、個人で使うには問題なさそうになってきたので、今後は使っていきたい。
私自身のメモ程度のものなのでいろいろ省略してますが、誰かのためになったらうれしいです。
文章を書くのが、圧倒的に下手なので、作家に弟子入りしたほうがいいですかね・・・
コメント