LoginSignup
7
4

More than 3 years have passed since last update.

monologを使ってロギング

Last updated at Posted at 2020-06-30

monologを使用して、ログの取得・記録の機能を追加することになったので、備忘録としてまとめます。

monologとは

phpのロギングのためのライブラリ。
ハンドラーによって、ファイル・メール受信・ソケット・データベースといった様々なWebサービスに記録することが可能。
PSR-3のインターフェースを実装している。
そのため、PSR-3を使用するフレームワークでは利用が容易。Symfony、Laravelでは標準で実装されている。

monologの導入

基本的な使用方法のまとめ

インストール

composerを使用してインストール

$ composer require monolog/monolog

上記を実行

または

composer.json
{
    "require": {
        "monolog/monolog": "^2.02"
    }
}

composer.jsonに記述し、インストール

$ composer inastall

使いかた

基本的な使い方は以下の通り
monologドキュメントより引用)

testlog.php

<?php

use Monolog\Logger;
use Monolog\Handler\StreamHandler;

// create a log channel
$log = new Logger('name');
$log->pushHandler(new StreamHandler('path/to/your.log', Logger::WARNING));

// add records to the log
$log->warning('Foo');
$log->error('Bar');

まず、チャネル(Loggerインスタンス)を作成する。
インスタンス作成時にチャネル名を引数として渡す(上記の場合'name')。チャネル名はログの場所に合わせて付けることで、複数のLoggerがある場合に抽出するなどの操作が容易になる。

作成したチャネルにpushHandlerでログの目的に合わせてハンドラーをセット。
StreamHandlerはmonologでファイル記録用の基本的なハンドラー。
上記の場合、第1引数はログを記録するファイルのパス、第2引数はログレベル(ログレベルの初期値はLogger::DEBUG)
ハンドラは複数持たせることができるので、複数の記録の機能を持たせることができる。

ログの記録の際は、レベルを指定できる。上記ではwarningレベルでFooを、errorレベルでBarを書き込みしている。

やってみた

今回やりたかったこと、「APIからのレスポンス結果($result)を一定期間分ファイルに記録する」を試してみた。(レスポンス結果の取得については割愛)

ハンドラーはStreamHandlerを継承したRotatingFileHandlerを使用。
RotatingFileHandlerは1日に1つのログファイルを作成、古いファイルは削除することができるので、一定期間のログを残す場合に便利。

response.php

use Monolog\Logger;
use Monolog\Handler\RotatingFileHandler;

-----------

// Create a handler
$handler = new RotatingFileHandler('/logs/response', 30);

// create a log channel
$log = new Logger('response');
$log->pushHandler($handler);

// add records to the log
$logger->info(json_encode($result,JSON_UNESCAPED_UNICODE));

logsフォルダにresponseというファイル名で、30日分の記録を保存するようにハンドラーを設定。
infoレベルでログを記録(レスポンスがjson形式で返ってくるので、json_encodeしている)。

結果、logsフォルダにはlogs\response-2020-03-31といった日付ごとのファイルが作成された。
ファイルの中には日時、チャネル名、ログレベル、ログ内容 の順で記録される。

↓ファイル内はこんな感じで記録されます

[2020-03-31 14:55:18] response.INFO: {"response":"{\"records\":[{\"date.............
[2020-03-31 14:55:20] response.INFO: {"response":"{\"records\":[{\"date.............

monologを試してみて

今回は簡易的な内容で試したが、もともとmonologはかなり高機能なロギングのライブラリなので、
ハンドラーに持たせるフォーマッターで出力形式もいろいろなものが選択でき、プロセッサーでログレコードに追加などの操作もできる。
使いこなすことができれば、かなり便利そうだなという印象でした。

7
4
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
7
4