💭
Monologのフォーマットをカスタマイズする方法
はじめに
こちらはMonologのフォーマットを魔改造した際の備忘録です。
通常の実装
以下のようなコードを書くと、Monologでログを出力することができます。
<?php
require_once 'vendor/autoload.php';
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
$logger = new Logger('logger');
$logger->pushHandler(new StreamHandler('./mono.log', Logger::INFO));
$logger->info('log');
出力したログはこちら。
[2020-10-23T09:32:09.910034+00:00] logger.INFO: log [] []
[]
とかいま欲しくないし、できたら以下のようにカスタマイズしたいのです。
[2020-10-23 9:32:09] INFO: log
さてやってみましょう。
いざカスタマイズ
コードを改変します。
<?php
require_once 'vendor/autoload.php';
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
use Monolog\Formatter\LineFormatter; // <-- LineFormatterを使う
$logger = new Logger('logger');
$custom_handler = new StreamHandler('./mono.log', Logger::INFO);
// 時間表示のフォーマット設定
$date_format = 'Y-n-d H:i:s';
// ログのフォーマットを設定
$format = '[%datetime%] %level_name%: %message%' . PHP_EOL;
// 第三引数は「ログ内のインライン改行を有効にするかどうか」の設定
// 今回は意味は無いが、有効にしておいた方が使いやすいのでtrueに
$formatter = new LineFormatter($format, $date_format, true);
$custom_handler->setFormatter($formatter);
$logger->pushHandler($custom_handler);
$logger->info('log');
結果はこちら
[2020-10-27 03:10:26] INFO: log
やったぜ
さいごに
非常に満足
Discussion