🔥
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の Services で logger
を設定します。
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
オブジェクトが取得できます。
Discussion