timatanga / logger
timatanga 日志包。
Requires
- php: ^8.0
- monolog/monolog: 2.x-dev
- psr/log: 3.x-dev
Requires (Dev)
- phpunit/phpunit: 10.0.x-dev
- symfony/var-dumper: 6.0.x-dev
This package is auto-updated.
Last update: 2024-09-29 06:08:41 UTC
README
为了跟踪应用程序中的活动,日志服务非常有帮助。根据您的需求,您可以将日志写入文件或将它们发送到网络服务以通知您的利益相关者。此包使用 Monolog 库,因此实现了 PSR-3 接口,您可以在自己的库中对其类型提示以保持最大的互操作性。
日志基于通道。每个通道可以有自己的“日志目的地”或格式,这取决于日志的严重性。同时使用不同的通道来提供关于不同主题的信息是可能的。
安装
composer require timatanga/logger
基本配置
Logger 包附带一个日志配置,您可以使用、扩展或根据需要更改它。它位于 config/logger.php 配置文件中,基本上由两部分组成。第一部分是与任何日志通道无关的基本日志配置。
// config/logger.php
return [
/**
* Default logfile
* If not explicitly set in a channel configuration the logfile is named like this
*/
'logFile' => 'log',
/**
* Logfile directory
* Filehandlers are writing logfiles to this relative location in regard to the root directory
*/
'logPath' => 'storage/logs',
/**
* Logger Timezone
* Overwrites default timezone which is UTC
*/
'timezone' => 'Europe/Berlin',
/**
* Logging Dateformat
* Logs are recorded in this datetime format
*/
'dateFormat' => 'Y-m-d H:i:s',
...
]
通道配置
第二部分包含通道配置。日志通道的配置遵循简单的结构。通道通过其键来识别,并至少需要一个处理器。所有其他参数都是可选的。以下是一个为“main”通道的配置示例。
// config/logger.php
return [
....
/**
* Channels
* Preconfigured log channels
*/
'channels' => [
'main' => [
'handler' => RotatingFileHandler::class,
'formatter' => LinePrettyFormatter::class,
'processor' =>
'config' => [
'filename' => 'log',
'maxFiles' => 10,
'level' => env('LOG_LEVEL_MAIN', 'debug'),
]
],
]
]
如前所述,每个通道至少需要一个处理器,可以是提供的 Monolog 处理器、现有处理器的扩展或您自己的处理器之一。处理器必须实现 Monolog\Handler\HandlerInterface
以被接受。
为通道设置格式器被认为是可选的。如果没有提供格式器,则默认使用 Monolog\Formatter\LineFormatter
。如果您希望替换格式器或构建自己的格式器,请考虑它必须实现 Monolog\Formatter\FormatterInterface
。
使用处理器,Monolog 转换日志消息或集成其他数据集。如果没有为通道显式设置处理器,则将 Monolog\Processor\PsrLogMessageProcessor
添加到处理器实例。此处理器具有根据 PSR-3 规则处理日志记录消息的能力,用 $context['foo'] 的值替换 {foo}。
通道配置的配置部分包含单个处理器的参数。每个处理器在创建新实例时都有自己的要求。请参阅处理器文档或源代码,以了解相应的参数。
用法
利用 logger 包既简单又直接。首先您需要创建 logger 的新实例。构造函数接受一个字符串或多个通道作为数组参数的单个通道。
$logger = new Logger('main');
$logger = new Logger(['main', 'error', 'slack']);
如果请求的通道之一未在配置文件中提供,您将抛出 timatanga\Logger\Exceptions\ResolveLoggerException
。
想象一下这种情况,您不能或不想更改日志记录器配置,但需要进一步使用日志记录器通道及其配置。为了避免抛出异常,您可以将自定义通道配置传递给 Logger 构造函数,如下所示。
$logger = new Logger(['main', extension'], ['extension' => ['handler' => RotatingFileHandler::class]]);
在上面的示例中,注册了通道“main”,因为其配置位于 config/logger.php 配置文件中。此外,注册了自定义通道“extension”,其配置在 Logger 构造函数中提供。
现在发送日志消息非常简单。您只需提及严重级别及其日志消息即可。
$logger->info("just an info");
您可能想将日志消息与上下文数据结合。
$logger->info("just an info {key}", ['key' => 'message']);
// will log: "just an info message"