PHPプログラムに関する各種メモ書き

PHPのログクラスmonolog を 使用する

● monolog のインストール

composer require monolog/monolog

● monolog のセッティング

次のようにしてセットしておきます。
以下の例では ./log/error.log にログを吐き出すようにセットしています。(ローテーションなし)
コンストラクタにでも記述しておくといいでしょう。

use Monolog\Logger;
use Monolog\Handler\StreamHandler;
use Monolog\Handler\RotatingFileHandler;
use Monolog\Formatter\LineFormatter;
private $monolog;
// monolog setting
$this->monolog = new Logger('mylog');
$log_formatter = new LineFormatter("[%datetime%] %level_name%: %message% %context% %extra%\n");
$log_handler = new StreamHandler('log/app.log', Logger::DEBUG);
$log_handler->setFormatter($log_formatter);
$this->monolog->pushHandler($log_handler);

● ログの書き込み

次の7種類のログを書き出すことができます (下に行くほど重要)

$this->monolog->info('ログテスト');
$this->monolog->notice('ログテスト');
$this->monolog->warning('ログテスト');
$this->monolog->error('ログテスト');
$this->monolog->critical('ログテスト');
$this->monolog->alert('ログテスト');
$this->monolog->emergency('ログテスト');

● monolog のローテーション

monologのローテーションを行うには最初のセッティングのところでローテーションハンドラを指定します。 (例 : RotatingFileHandler を呼び出しています。 log/app-2018-07-11.log のように日付ごとにログが作成されます)

// monolog setting
$this->monolog = new Logger('mylog');
$log_formatter = new LineFormatter("[%datetime%] %level_name%: %message% %context% %extra%\n");
$log_handler = new RotatingFileHandler('log/app.log', 0, Logger::DEBUG, true, 0664);
$log_handler->setFormatter($log_formatter);
$this->monolog->pushHandler($log_handler);

● ログハンドラの種類

StreamHandler			: 任意のログファイルにログを保存する 
RotatingFileHandler	: 日付でログファイルをローテーションする
SyslogHandler			: Syslogに吐く
SwiftMailerHandler	: メールで通知する
MongoDBHandler			: NoSQLにログを格納するハンドラ、
FirePHPHandler			: FireBugにログを出力する
ChromePHPHandler		: Chromeにログを出力する
FingersCrossedHandler		: ログを貯めておいて、危険なレベルのログ出力が来たタイミングでログを出力する

monologのログハンドラの種類
https://github.com/Seldaek/monolog/blob/master/doc/02-handlers-formatters-processors.md

No.1272
07/21 18:57

edit