はじめに
前回に続いて、勢いでロガーを作ってみました。といってもMonologをカスタマイズしただけです。
準備
Composerを使ってMonologを入れます。
Composerのインストール
curl -s https://getcomposer.org/installer | php -- --install-dir={インストール先}
composer.jsonの作成
composer.json
{
"require": {
"monolog/monolog": "1.2.*"
}
}
Monologのインストール
composer install
ソースコード
Log.php
<?php
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
use Monolog\Handler\NativeMailerHandler;
use Monolog\Formatter\LineFormatter;
/**
* ログの基底クラスです
*/
class Log
{
/**
* @var object container for the Monolog instance
*/
private static $logger;
/**
* @var array $levels ログレベル情報
*/
private static $levels = array(
'DEBUG' => Logger::DEBUG,
'INFO' => Logger::INFO,
'NOTICE' => Logger::NOTICE,
'WARNING' => Logger::WARNING,
'ERROR' => Logger::ERROR,
'CRITICAL' => Logger::CRITICAL,
'ALERT' => Logger::ALERT,
'EMERGENCY' => Logger::EMERGENCY,
);
/**
* セットアップをします
*
* @return void
*/
public static function setup($config)
{
self::$logger = new Logger('gnlp');
$format = "%datetime% [%level_name%] %message%\n";
$formatter = new LineFormatter($format);
$file = $config['path'] . date('Ymd', strtotime('now')) . '.log';
$stream = new StreamHandler($file, $config['level']);
$stream->setFormatter($formatter);
self::$logger->pushHandler($stream);
}
/**
* ログ情報を出力します
*
* @param mixed $content 出力内容
* @param string $level ログレベル
*/
public static function output($content, $level = 'INFO')
{
if (is_null(self::$logger)) {
return;
}
self::$logger->log(self::$levels[$level], $content);
}
}
使い方
セットアップ
$config = array();
$config['path'] = {ログ出力先}
$config['level'] = {デフォルトのログレベル}
Log::setup($config);
出力
try {
return true;
} catch (Exception $e) {
Log::output($e, {ログレベル});
return false;
}
補足
- {日付} [{エラーレベル}] {エラーメッセージ} のように出力されます。