LoginSignup
0
1

More than 5 years have passed since last update.

お手軽簡単PHPでロガーを作ってみた

Last updated at Posted at 2017-06-27

はじめに

前回に続いて、勢いでロガーを作ってみました。といっても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;
}

補足

  • {日付} [{エラーレベル}] {エラーメッセージ} のように出力されます。

全ページリンク

0
1
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
0
1