目次

ログ出力 - monolog

Version 2.0 (MIT License)

y2sunlight 2020-03-11

定番ライブラリー に戻る

関連記事

サイト

テストプログラムの所在

{Project Folder}\test\

monologについて

Monologは、ファイル、ソケット、メール、Webサービスまたはデータベースなどの様々な場所にログ出力できます。これら出力先へのロギングは「ハンドラ」と呼ばれるインスタンスによって処理され、1つのロガーに対して複数のハンドラを登録できるます。また、ロガーは「チャネル」と呼ばれる単位で複数の作成が可能です。このように、複数ハンドラ・複数チャネルの非常に高度なロギング戦略を構築できます。

Monologは、LaravelやSymfonyなどのPHPフレームワークで採用されている事を考えれば、ロギングについてはMonolog以外に考えられません。


インストール

composer require monolog/monolog
Using version ^2.0 for monolog/monolog
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 2 installs, 0 updates, 0 removals
  - Installing psr/log (1.1.2): Downloading (100%)
  - Installing monolog/monolog (2.0.2): Downloading (100%)
monolog/monolog suggests installing graylog2/gelf-php (Allow sending log messages to a GrayLog2 server)
monolog/monolog suggests installing doctrine/couchdb (Allow sending log messages to a CouchDB server)
monolog/monolog suggests installing ruflin/elastica (Allow sending log messages to an Elastic Search server)
monolog/monolog suggests installing elasticsearch/elasticsearch (Allow sending log messages to an Elasticsearch server via official client)
monolog/monolog suggests installing php-amqplib/php-amqplib (Allow sending log messages to an AMQP server using php-amqplib)
monolog/monolog suggests installing ext-amqp (Allow sending log messages to an AMQP server (1.0+ required))
monolog/monolog suggests installing ext-mongodb (Allow sending log messages to a MongoDB server (via driver))
monolog/monolog suggests installing mongodb/mongodb (Allow sending log messages to a MongoDB server (via library))
monolog/monolog suggests installing aws/aws-sdk-php (Allow sending log messages to AWS services like DynamoDB)
monolog/monolog suggests installing rollbar/rollbar (Allow sending log messages to Rollbar)
monolog/monolog suggests installing php-console/php-console (Allow sending log messages to Google Chrome)
Writing lock file
Generating autoload files
1 package you are using is looking for funding.
Use the `composer fund` command to find out more!
Note:
Eclipse起動中にパッケージを取得した場合は、プロジェクト・エクスプローラー内の[プロジェクト(apricote)]を右クリックして[リフレッシュ]を選択して下さい。また、新しく取得したパッケージのインテリセンスが有効にならない場合は、プロジェクトのビルトまたはクリーン&ビルドを行ってビルドリストの更新を行って下さい。

パッケージの取得が終わると composer.jsonrequire に以下が追加されます。

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


テストプログラム

パッケージのテストフォルダ(test\)に、テスト用のコード(monolog.php)を作成し実行します。以下の例では、test\var\logs\app.log にログファイルが出力されます。

monolog.php
<?php
require __DIR__.'/../vendor/autoload.php';
 
use Monolog\Logger;
use Monolog\Formatter\LineFormatter;
use Monolog\Handler\StreamHandler;
 
// monologの初期化 ////////////////////////
$log = new Logger('APRICOT');
 
// ログチャネルの作成  ////////////////////////
$log_path = __DIR__.'/var/logs/app.log';
$log_level = Logger::DEBUG;
$stream = new StreamHandler($log_path, $log_level);
$log->pushHandler($stream);
 
// ログフォーマット設定
// ログ内の改行を許可、付加情報が空の場合無視する
$stream->setFormatter(new LineFormatter(null, null, true, true));
 
// ログ出力 ///////////////////////////////
$log->error('Errorメッセージ');
$log->warning('Warningメッセージ');
$log->info('Infoメッセージ');
$log->debug('Debugメッセージ');
 
echo 'Hello Monolog!';

実行結果

app.log
[2020-03-20T02:05:26.435346+01:00] APRICOT.ERROR: Errorメッセージ  
[2020-03-20T02:05:26.436812+01:00] APRICOT.WARNING: Warningメッセージ  
[2020-03-20T02:05:26.437220+01:00] APRICOT.INFO: Infoメッセージ  
[2020-03-20T02:05:26.437657+01:00] APRICOT.DEBUG: Debugメッセージ