CodeIgniter4でMonologを使う

CodeIgniter4でMonologを使うように設定してみます。

CodeIgniter4はPSR-3に準拠していますので、PSR-3準拠のロガーなら簡単に置き換えることができます。

動作確認環境

  • CodeIgniter 4.1.4
  • Composer 2.1.6
  • Monolog 2.3.4
  • PHP 8.0.10
  • macOS 10.15.7

Monologのインストール

ComposerでMonologをインストールします。

$ composer require monolog/monolog

Servicesの設定

CodeIgniter4の Serviceslogger を設定します。

app/Config/Services.php:

<?php

namespace Config;

use CodeIgniter\Config\BaseService;
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
use Psr\Log\LoggerInterface;

class Services extends BaseService
{
     public static function logger($getShared = true): LoggerInterface
     {
         if ($getShared) {
             return static::getSharedInstance('logger');
         }

         $log = new Logger('ci4');

         $logFile = WRITEPATH.'logs/app.log';
         $log->pushHandler(new StreamHandler(
             $logFile,
             Logger::DEBUG,
             true,
             null,
             true
         ));

         return $log;
     }
}

Config\Services::logger() を追加します。Monologをインスタンス化し、設定し、そのインスタンスを返します。

使い方

ログを出力する

log_message() がそのまま使えます。

log_message('error', 'This is error log.');

以下のようにログファイルに記録されました。

writable/logs/app.log:

[2021-09-16T09:11:47.125967+09:00] ci4.ERROR: This is error log. [] []

Monologインスタンスを取得する

CodeIgniter4の Services から logger を取得します。

$logger = service('logger');
$logger = \Config\Services::logger();

これで、Monolog\Loggerオブジェクトが取得できます。

参考

Date: 2021/09/16

Tags: codeigniter, codeigniter4, monolog, logging