joebengalen/logger

轻量级psr-3日志库。

dev-master 2015-03-24 22:56 UTC

This package is not auto-updated.

Last update: 2024-09-14 17:37:16 UTC


README

Build Status

轻量级 psr-3 日志库。

入门指南

安装

建议使用composer安装此包

require: {
    "joebengalen/logger": "*"
}

使用方法

use JoeBengalen\Logger\Logger;
use JoeBengalen\Logger\Handler;

// basic instantiation of the logger
$logger = new Logger([
    // callable handlers
]);

// basic usage
$logger->emergency('emergency message');    // System is unusable
$logger->alert('alert message');            // Action must be taken immediately (Example: Entire website down, database unavailable, etc. This should trigger the SMS alerts and wake you up.)
$logger->critical('critical message');      // Critical conditions (Example: Application component unavailable, unexpected exception.)
$logger->error('error message');            // Runtime errors that do not require immediate action but should typically be logged and monitored.
$logger->warning('warning message');        // Exceptional occurrences that are not errors (Example: Use of deprecated APIs, poor use of an API, undesirable things that are not necessarily wrong.)
$logger->notice('notice message');          // Normal but significant events.
$logger->info('info message');              // Interesting events (Example: User logs in, SQL logs.)
$logger->debug('debug message');            // Detailed debug information.

上下文

除了消息外,还可以传递第二个参数。这个上下文是一个数组,可以包含任何内容。

可以使用$context在消息中替换占位符。

$logger->info('User {username} created.', ['username' => 'John Doe']);
// -> User John Doe created.

上下文有一个特殊键exception,可以用来传递一个\Exception。处理器可以识别\Exception并对其进行处理。

$logger->critical("Unexpected Exception occurred.", ['exception' => new \Exception('Something went horribly wrong :(')]);

除了命名功能外,上下文数组还可以用来传递任何可能对消息有用的数据。

处理器

处理器是注册到日志器中的可调用函数。用户可以注册哪些处理器。**注意**:没有默认处理器。因此,如果没有注册任何处理器,则不会发生任何事情。注册的处理器将按顺序调用。

已发货处理器

所有已发货处理器都会处理每个消息。没有基于日志级别的过滤器。

FileHandler

FileHandler在其初始化时接收一个文件,并将所有消息记录到该文件中。

$logger = new Logger([
    new Handler\FileHandler('default.log')
]);
DatabaseHandler

DatabaseHandler在其初始化时接收一个\PDO实例,并将所有消息记录到一个表中。

$logger = new Logger([
    new Handler\DatabaseHander(new \PDO(...));
]);

自定义处理器

处理器是一个可调用函数,它接收一个JoeBengalen\Logger\MessageInterface的实例。

function (\JoeBengalen\Logger\MessageInterface $message) { }

所有已发货处理器都是可调用的对象,但处理器也可以是一个匿名函数、静态类方法或任何其他有效的可调用函数。

use JoeBengalen\Logger\MessageInterface;
use Psr\Log\LogLevel;

$logger = new Logger([
    
    // anonymous function
    function (MessageInterface $message) {
        if ($message->getLevel() === LogLevel::EMERGENCY) {
            // send an email
        }
    },

    // static class method
    ['ClassName', 'staticMethod'] // declared somewhere else
]);

**注意**:处理上下文数组的正确处理取决于处理器。(例如,在消息中替换占位符并识别一个\Exception

自定义MessageInterface工厂

创建MessageInterface实例的工厂是另一个可调用函数,注册为$option message.factory。这个工厂接收三个参数:$level$messagearray $context,并应返回一个实现了JoeBengalen\Logger\MessageInterface的实例。除此之外,工厂可以完全自由地返回任何它想要的对象(只要它实现了正确的接口),并按其喜好格式化给定的参数。

默认返回一个Message实例。

use JoeBengalen\Logger\Logger;
use JoeBengalen\Logger\Message;

$logger = new Logger([
    // handlers
], [

    // MessageInterface factory
    'message.factory' => function($level, $message, $context) {
        return new Message($level, $message, $context);
    }

]);