laravelのログについて

laravel

頑張って投稿しようと思うがなかなか続かないせぃゆーです。

今日は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キーの値はログを書くときのチャンネル名
drivercustomを指定
viaMonologのインスタンスを生成するためのクラスを指定
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を使える。

仕事で使うにはまだまだ弊害があるけど、個人で使うには問題なさそうになってきたので、今後は使っていきたい。

私自身のメモ程度のものなのでいろいろ省略してますが、誰かのためになったらうれしいです。

文章を書くのが、圧倒的に下手なので、作家に弟子入りしたほうがいいですかね・・・

おすすめ書籍

コメント