💭

Monologのフォーマットをカスタマイズする方法

2020/10/27に公開

はじめに

こちらは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