joebengalen / logger
轻量级psr-3日志库。
Requires
- php: >=5.4
- psr/log: ~1.0
This package is not auto-updated.
Last update: 2024-09-14 17:37:16 UTC
README
轻量级 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
、$message
和array $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); } ]);