2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ログファイル名を動的に変更する

Last updated at Posted at 2024-10-30

laravel.log に何でもいれるな

原則として laravel.log はエラーログだけにしたい。エラーが発生しないなら常に空っぽの状態というのが心休まる。
開発時に Debug ログの出力を仕込んだなら、コミットするときに削除(せめてコメントアウト)してもらいたい。

デバックが必要な事態が起きたときに Debug ログを仕込んで laravel.log を監視しても、全然関係ないデバッグ情報が延々と流れてきては辟易する。

定期実行タスクの実行ログや特定機能のデバッグログは、それぞれの機能や目的に応じてログファイル名を変えて保存したい。……ということで、ログファイル名を指定できるカスタムヘルパー logger_to を作ってみた。

カスタムヘルパーを作成

標準のロギングチャンネル single をベースに使用して名前だけを変更する。

なお sigle をベースにするのは、ローテションは logrotate でおこなうべきで、Laravel 側で日付毎ログにするのは余計なお世話だから。

app/Helpers/custom.php

use Illuminate\Support\Facades\Log;
use Monolog\Handler\StreamHandler;
use Monolog\Logger;

if (!function_exists('logger_to')) {
    /**
     * Undocumented function
     *
     * @param string $fileName    : 区切りでlevel(デフォルトdebug)を指定可
     * @param string $message
     * @param array $context
     * @param array $extra
     * @return void
     */
    function logger_to(string $fileName, string $message, array $context = [], array $extra = []): void
    {
        list ($fileName, $lavel) = explode(':', $fileName);
        $level = $level ?: 'debug';

        // ファイル名に拡張子があれば削除して .log に置換
        $fileName = preg_replace(['/\..+$/', '/$/'], ['', '.log'], $fileName);

        $log = new Logger('single');
        $log->pushHandler(new StreamHandler(storage_path('logs/' . $fileName), Logger::toMonologLevel($level)));

        $log->{$level}($message, $context, $extra);
    }}

オートロード設定

composer.json に追加

// composer.json
"autoload": {
    "psr-4": {
        "App\\": "app/"
    },
    "files": [
        "app/Helpers/custom.php"
    ]
}

オートロードのリフレッシュ

composer dump-autoload

使用例

  • mydebug.logに変数$userの配列をDEBUGg出力
    logger_to('mydebug', 'user', $user->toArray())
    
  • mytask.logにタスクの開始をINOF出力
    logger_to('mytask:info', 'start task command');
    
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?