corpus / loggers
有用的PSR-3实用日志记录器
Requires
- php: ^7.4 || ^8.0
- psr/log: ^1 || ^2 || ^3
Requires (Dev)
- corpus/coding-standard: ^0.8.0
- corpus/recursive-require: ^1.2
- donatj/drop: ^1.1
- donatj/mddoc: ^0.10.1
- friendsofphp/php-cs-fixer: ^3.45
- phpunit/phpunit: ^9.6
- rawr/phpunit-data-provider: ^3.3
- squizlabs/php_codesniffer: ^3.8
Provides
- psr/log-implementation: 1.0|2.0|3.0
This package is auto-updated.
Last update: 2024-09-03 11:53:40 UTC
README
PSR-3: 日志接口的日志记录器和工具。
- LogLevelFilter - LogLevelFilter 是一个基于日志级别的 PSR 日志记录器,可以根据日志级别过滤日志。它可以用来过滤掉特定用例中不需要的日志消息。
- LogLevelLoggerMux - LogLevelLoggerMux 是一个基于日志级别的 PSR 日志记录器,根据日志级别将日志多路复用到不同的日志记录器。
- LoggerVerbosityFilter - LoggerVerbosityFilter 根据给定的整数详细级别静音日志消息。
- LoggerWithContext - LoggerWithContext 是一个在委派给另一个日志记录器之前,将给定上下文添加到所有日志消息中的日志记录器。
- MemoryLogger - MemoryLogger 是一个将所有日志存储在本地内存中的 PSR 日志记录器。
- MultiLogger - MultiLogger 是一个将日志委派给多个其他日志记录器的 PSR 日志记录器。
- StreamResourceLogger - StreamResourceLogger 是一个将日志写入流资源的 PSR 日志记录器。
要求
- psr/log: ^1 || ^2 || ^3
- php: ^7.4 || ^8.0
安装
使用以下命令安装最新版本:
composer require 'corpus/loggers'
示例
此示例演示了如何将日志记录器链接在一起以创建复杂交互。
<?php use Corpus\Loggers\LoggerWithContext; use Corpus\Loggers\LogLevelFilter; use Corpus\Loggers\MemoryLogger; use Corpus\Loggers\MultiLogger; use Corpus\Loggers\StreamResourceLogger; use Psr\Log\LogLevel; require __DIR__ . '/../vendor/autoload.php'; $memoryLogger = new MemoryLogger; $cliLogger = new StreamResourceLogger( fopen('php://output', 'w') ); $logger = new MultiLogger( new LogLevelFilter( (new LoggerWithContext($memoryLogger))->withContext([ 'Logger' => 'Number 1' ]), [ Psr\Log\LogLevel::INFO ] ), new LogLevelFilter( (new LoggerWithContext($cliLogger))->withContext([ 'Logger' => 'Number 2' ]), [ Psr\Log\LogLevel::INFO, LogLevel::DEBUG ] ), new LogLevelFilter( (new LoggerWithContext($cliLogger))->withContext([ 'Logger' => 'Number 3' ]), [ Psr\Log\LogLevel::INFO, LogLevel::DEBUG ], true // reverse filter - only log levels NOT in the array ) ); $logger->info('Hello World', [ 'hello' => 'world' ]); $logger->debug('How are you?', [ 'foo' => 'bar' ]); $logger->error('I am fine', [ 'bar' => 'baz', 'baz' => 'qux' ]); echo "\n--- dumping memory logger ---\n\n"; var_export($memoryLogger->getLogs());
2023-11-30T05:34:35+00:00 info: Hello World
Logger: 'Number 2'
hello: 'world'
2023-11-30T05:34:35+00:00 debug: How are you?
Logger: 'Number 2'
foo: 'bar'
2023-11-30T05:34:35+00:00 error: I am fine
Logger: 'Number 3'
bar: 'baz'
baz: 'qux'
--- dumping memory logger ---
array (
0 =>
array (
'level' => 'info',
'message' => 'Hello World',
'context' =>
array (
'Logger' => 'Number 1',
'hello' => 'world',
),
),
)
文档
类:\Corpus\Loggers\Interfaces\LoggerWithContextInterface
方法:LoggerWithContextInterface->withContext
function withContext(array $context) : self
返回具有给定上下文的新实例,替换现有的上下文。
replacing the existing context.
方法:LoggerWithContextInterface->withAddedContext
function withAddedContext(array $context) : self
返回具有给定上下文的新实例,替换现有的上下文。
添加到现有的上下文中。
类:\Corpus\Loggers\Interfaces\MultiLoggerInterface
方法:MultiLoggerInterface->withAdditionalLoggers
function withAdditionalLoggers(\Psr\Log\LoggerInterface ...$loggers) : self
withAdditionalLoggers 返回具有给定日志记录器的新实例
添加到委派的日志记录器列表中。
类:\Corpus\Loggers\Interfaces\WithAdditionalLoggersInterface
方法:WithAdditionalLoggersInterface->withAdditionalLoggers
function withAdditionalLoggers(\Psr\Log\LoggerInterface ...$loggers) : self
withAdditionalLoggers 返回具有给定日志记录器的新实例
添加到委派的日志记录器列表中。
类:\Corpus\Loggers\Interfaces\WithContextInterface
方法:WithContextInterface->withContext
function withContext(array $context) : self
返回具有给定上下文的新实例,替换现有的上下文。
replacing the existing context.
方法:WithContextInterface->withAddedContext
function withAddedContext(array $context) : self
返回具有给定上下文的新实例,替换现有的上下文。
添加到现有的上下文中。
类:\Corpus\Loggers\LoggerVerbosityFilter
LoggerVerbosityFilter 根据给定的整数详细级别静音日志消息。
默认情况下,
- 级别 0 不记录消息。
- 级别 1 记录紧急、警报、关键和错误消息。
- 级别 2 记录紧急、警报、关键、错误、警告和通知消息。
- 级别 3 记录紧急、警报、关键、错误、警告、通知和信息消息。
- 级别 4 或更高记录紧急、警报、关键、错误、警告、通知、信息和调试消息。
可以通过传递一个回调来更改级别,重新定义每个日志级别的详细级别。
可以通过调用 withVerbosity() 来更改详细级别
方法:LoggerVerbosityFilter->__construct
function __construct(\Psr\Log\LoggerInterface $logger [, int $verbosity = 0 [, ?callable $verbosityFromLevelCallback = null]])
参数
- callable | null
$verbosityFromLevelCallback
- 一个回调,它接受一个 Psr\Log\LogLevel 日志级别字符串并返回一个整数详细级别。如果为 null,则使用默认回调。
方法:LoggerVerbosityFilter->withVerbosity
function withVerbosity(int $verbosity) : self
返回具有指定详细级别的新实例。
方法:LoggerVerbosityFilter->withVerbosityFromLevelCallback
function withVerbosityFromLevelCallback(callable $verbosityFromLevelCallback) : self
返回具有指定详细级别回调的新实例。
类:\Corpus\Loggers\LoggerWithContext
LoggerWithContext 是一个在委派给另一个日志记录器之前,将给定上下文添加到所有日志消息中的日志记录器。
这对于添加上下文到所有日志消息很有用,例如当前请求 ID、IP 地址或当前用户 ID。
方法:LoggerWithContext->__construct
function __construct(\Psr\Log\LoggerInterface $logger [, array $context = []])
使用给定的日志记录器和上下文创建一个新的 LoggerWithContext 实例。
给定上下文将被添加到所有日志消息中。
参数
- \Psr\Log\LoggerInterface
$logger
- 要委托的日志记录器。 - 数组
$context
- 要添加到所有日志消息中的上下文。
方法:LoggerWithContext->withContext
function withContext(array $context) : self
返回具有给定上下文的新实例,替换现有的上下文。
replacing the existing context.
方法:LoggerWithContext->withAddedContext
function withAddedContext(array $context) : self
返回具有给定上下文的新实例,替换现有的上下文。
添加到现有的上下文中。
类:\Corpus\Loggers\LogLevelFilter
LogLevelFilter是一个基于日志级别的PSR日志记录器。
它可以用来过滤掉特定用例中不需要的日志消息。
例如,你可能希望将所有DEBUG级别的消息记录到文件中,但只将ERROR级别或更高的消息记录到控制台。
此日志记录器可以用来从控制台日志记录器中过滤掉DEBUG消息。
此日志记录器接受要过滤的日志级别列表以及一个布尔值,表示是否排除或包含给定的日志级别。
方法:LogLevelFilter->__construct
function __construct(\Psr\Log\LoggerInterface $logger, array $levels [, bool $exclude = false])
参数
- 字符串数组
$levels
- 要过滤的日志级别。 - 布尔值
$exclude
- 是否排除给定的级别,或包含它们。
类:\Corpus\Loggers\LogLevelLoggerMux
LogLevelLoggerMux是一个基于日志级别将日志多路复用到不同日志记录器的PSR日志记录器。
方法:LogLevelLoggerMux->__construct
function __construct([ ?\Psr\Log\LoggerInterface $defaultLogger = null [, ?\Psr\Log\LoggerInterface $emergencyLogger = null [, ?\Psr\Log\LoggerInterface $alertLogger = null [, ?\Psr\Log\LoggerInterface $criticalLogger = null [, ?\Psr\Log\LoggerInterface $errorLogger = null [, ?\Psr\Log\LoggerInterface $warningLogger = null [, ?\Psr\Log\LoggerInterface $noticeLogger = null [, ?\Psr\Log\LoggerInterface $infoLogger = null [, ?\Psr\Log\LoggerInterface $debugLogger = null]]]]]]]]])
参数
- \Psr\Log\LoggerInterface | null
$defaultLogger
- 对于未指定其他日志记录器的级别的默认日志记录器。如果为null,将使用Psr\Log\NullLogger。
方法:LogLevelLoggerMux->withEmergencyLogger
function withEmergencyLogger(\Psr\Log\LoggerInterface $logger) : self
返回一个新的实例,该实例使用指定的日志记录器处理Emergency日志级别。
方法:LogLevelLoggerMux->withAlertLogger
function withAlertLogger(\Psr\Log\LoggerInterface $logger) : self
返回一个新的实例,该实例使用指定的日志记录器处理Alert日志级别。
方法:LogLevelLoggerMux->withCriticalLogger
function withCriticalLogger(\Psr\Log\LoggerInterface $logger) : self
返回一个新的实例,该实例使用指定的日志记录器处理Critical日志级别。
方法:LogLevelLoggerMux->withErrorLogger
function withErrorLogger(\Psr\Log\LoggerInterface $logger) : self
返回一个新的实例,该实例使用指定的日志记录器处理Error日志级别。
方法:LogLevelLoggerMux->withWarningLogger
function withWarningLogger(\Psr\Log\LoggerInterface $logger) : self
返回一个新的实例,该实例使用指定的日志记录器处理Warning日志级别。
方法:LogLevelLoggerMux->withNoticeLogger
function withNoticeLogger(\Psr\Log\LoggerInterface $logger) : self
返回一个新的实例,该实例使用指定的日志记录器处理Notice日志级别。
方法:LogLevelLoggerMux->withInfoLogger
function withInfoLogger(\Psr\Log\LoggerInterface $logger) : self
返回一个新的实例,该实例使用指定的日志记录器处理Info日志级别。
方法:LogLevelLoggerMux->withDebugLogger
function withDebugLogger(\Psr\Log\LoggerInterface $logger) : self
返回一个新的实例,该实例使用指定的日志记录器处理Debug日志级别。
类:\Corpus\Loggers\MemoryLogger
MemoryLogger是一个将所有日志存储在本地内存中的PSR日志记录器。
这主要用于测试目的。
<?php namespace Corpus\Loggers; class MemoryLogger { public const KEY_LEVEL = 'level'; public const KEY_MESSAGE = 'message'; public const KEY_CONTEXT = 'context'; }
方法:MemoryLogger->getLogs
function getLogs() : array
getLogs返回已记录到该日志记录器的所有日志。
返回的数组是日志记录列表,每个记录都是一个键为数组的数组
- MemoryLogger::KEY_LEVEL : 日志级别
- MemoryLogger::KEY_MESSAGE : 日志消息
- MemoryLogger::KEY_CONTEXT : 日志上下文
返回
- 数组[]
方法:MemoryLogger->clearLogs
function clearLogs() : void
clearLogs清除已记录到该日志记录器的所有日志。
类:\Corpus\Loggers\MultiLogger
MultiLogger是一个将日志委托到多个其他日志记录器的PSR日志记录器。
方法:MultiLogger->__construct
function __construct(\Psr\Log\LoggerInterface ...$loggers)
使用给定的日志记录器创建一个新的MultiLogger实例。
方法:MultiLogger->withAdditionalLoggers
function withAdditionalLoggers(\Psr\Log\LoggerInterface ...$loggers) : self
withAdditionalLoggers 返回具有给定日志记录器的新实例
添加到委派的日志记录器列表中。
类:\Corpus\Loggers\StreamResourceLogger
StreamResourceLogger是一个将日志写入流资源的PSR日志记录器。
这特别适用于写入STDERR或STDOUT,或写入文件。
方法:StreamResourceLogger->__construct
function __construct($resource)
参数
- 资源
$resource
- 可写流资源
抛出: \Corpus\Loggers\Exceptions\LoggerArgumentException
- 如果给定的资源不是流
抛出: \Corpus\Loggers\Exceptions\LoggerInitException
- 如果给定的资源不可写