exileed / yii2-monolog2
Yii2 的 Monolog2 扩展
Requires
- php: ^7.4 || ^8.0
- monolog/monolog: ^2.0
- tightenco/collect: ^5.8 || ^6.0 || ^7.0 ||^8.0
- yiisoft/yii2: ~2.0.11
Requires (Dev)
- mockery/mockery: ^1.0
- phpunit/phpunit: ^9.0
- squizlabs/php_codesniffer: ^3.6
This package is auto-updated.
Last update: 2024-09-27 18:09:35 UTC
README
Yii2 Monolog2
Yii2 Monolog2 允许用户轻松地将 Monolog 与 Yii2 结合使用。有关 Monolog 本身的说明,请参阅文档。
目录
安装
使用 Composer 在项目的根目录中安装此包。
composer require exileed/yii2-monolog2
配置
在您的应用程序配置中将 leinonen\Yii2Monolog\Yii2Monolog
配置为启动组件。
一个名为 myLoggerChannel
的日志通道的示例配置,包含一个基本的 StreamHandler 和一个 UidProcessor
use leinonen\Yii2Monolog\MonologTarget; use leinonen\Yii2Monolog\Yii2Monolog; use Monolog\Handler\StreamHandler; use Monolog\Processor\UidProcessor; ... [ 'bootstrap' => ['monolog'], 'components' => [ ... 'monolog' => [ 'class' => Yii2Monolog::class, 'channels' => [ 'myLoggerChannel' => [ 'handlers' => [ StreamHandler::class => [ 'path' => '@app/runtime/logs/someLog.log', ], ], 'processors' => [ UidProcessor::class, ], ], ], ], ], ... ]
通道
要了解 Monolog 通道的核心概念,请参阅Monolog 的官方文档。
该组件允许使用 channels
配置键注册多个通道,使用 channel name
=> 配置数组
键值对。
主通道
组件会自动注册一个主通道,在请求 DI 容器中的 Psr\Log\LoggerInterface
或在没有指定通道名称的情况下从组件获取 Logger 时使用。
主通道可以通过 mainChannel
配置键进行配置
[ 'components' => [ ... 'monolog' => [ 'class' => Yii2Monolog::class, 'channels' => [ 'myFirstChannel' => [ ... ], 'someOtherAwesomeChannel' => [ ... ], ], 'mainChannel' => 'someOtherAwesomeChannel' ] ] ]
如果主通道为空或未指定,则将使用通道列表中的第一个通道作为主通道。在上面的示例配置中,它将是 myFirstChannel
。
处理器
该包支持 Monolog 的所有官方和第三方处理器。它默认使用 leinonen\Yii2Monolog\CreationStrategies\ReflectionStrategy
在后台确定要构建处理器的配置值。所有处理器都通过 Yii 的 DI 容器解析,这使其更容易实现自定义处理器。
带有两个处理器的示例处理器配置
[ ... 'monolog' => [ 'channels' => [ 'myLoggerChannel' => [ 'handlers' => [ SlackbotHandler::class => [ 'slackTeam' => 'myTeam', 'token' => 'mySecretSlackToken', 'channel' => 'myChannel', ], RotatingFileHandler::class => [ 'path' => '@app/runtime/logs/myRotatinglog.log', 'maxFiles' => 10, ], ], ], ], ], ... ]
您可以从Monolog\Handler 命名空间中找到可用的处理器
Yii2 特定处理器
该包还为一些处理器提供了特定的创建策略,以帮助与 Yii2 集成。
StreamHandler
配置值 path
通过 Yii 的 getAlias()
方法解析,因此可以在此配置中使用别名,例如 @app
。使用此选项代替 stream
RotatingFileHandler
配置值 path
通过 Yii 的 getAlias()
方法解析,因此可以在此配置中使用别名,例如 @app
。使用此选项代替 filename
格式化器
该包支持 Monolog 的所有官方和第三方格式化器。它默认在后台使用 leinonen\Yii2Monolog\CreationStrategies\ReflectionStrategy
确定要构建格式化器的配置值。所有格式化器都通过 Yii 的 DI 容器解析,这使其更容易实现自定义格式化器。
您可以为每个处理器配置自定义格式化器。格式化器通过处理器配置数组中的 formatter
键进行配置
'handlers' => [ StreamHandler::class => [ 'path' => '@app/runtime/logs/myLog.log', 'formatter' => [ LineFormatter::class => [ 'format' => "[%datetime%] %channel%.%level_name%: %message% %context% %extra%\n", 'dateFormat' => "Y-m-d\TH:i:sP" ] ] ] ]
您可以在 Monolog/Formatter 命名空间中找到可用的格式化程序。
处理器
该软件包支持 Monolog 的所有官方和第三方处理器。它默认使用 leinonen\Yii2Monolog\CreationStrategies\ReflectionStrategy
在后台确定需要用到的配置值。所有处理器都通过 Yii 的依赖注入容器解析,这使得实现自己的自定义处理器变得更容易。
处理器可以全局定义针对一个目标,或者针对特定处理器。处理器通过配置数组中的 processors
键和可调用数组进行配置
[ ... 'monolog' => [ 'channels' => [ 'myLoggerChannel' => [ 'processors' => [ GitProcessor::class, function ($record) { $record['myCustomData'] = 'test'; return $record; }, ], ], ], ], ... ]
或者配置到特定处理器
... 'handlers' => [ StreamHandler::class => [ 'path' => '@app/runtime/logs/myLog.log', 'processors' => [ GitProcessor::class, function ($record) { $record['myCustomData'] = 'test'; return $record; } ] ]
您可以在 Monolog/Processor 命名空间中找到可用的处理器。
创建后配置处理器/格式化器/处理器
为了进一步定制,可以为所有使用 leinonen\Yii2Monolog\CreationStrategies\ReflectionStrategy
创建的类指定一个 configure
键。此配置键必须是一个可调用函数,它接收创建的类实例和配置。它还必须返回该实例。它在类从 Yii 的依赖注入容器解析后调用。例如,可以自定义 Monolog\Handler\RotatingFileHandler
的文件名格式
'handlers' => [ RotatingFileHandler::class => [ 'path' => 'something', 'maxFiles' => 2, 'configure' => function (RotatingFileHandler $handler, $config) { $handler->setFilenameFormat('myprefix-{filename}-{date}', 'Y-m-d'); return $handler; } ], ]
使用
将组件作为 Yii 的日志目标使用
如果您想将此组件集成到使用 Yii 自身日志记录器的现有项目中,可以轻松配置通道作为日志目标。请参阅有关日志目标的Yii 文档。
示例配置
use leinonen\Yii2Monolog\MonologTarget; use leinonen\Yii2Monolog\Yii2Monolog; [ 'bootstrap' => ['monolog', 'log'], 'components' => [ ... 'monolog' => [ 'class' => Yii2Monolog::class, 'channels' => [ 'myFirstChannel' => [ ... ], 'someOtherAwesomeChannel' => [ ... ], ], 'mainChannel' => 'someOtherAwesomeChannel' ], 'log' => [ 'targets' => [ [ 'class' => MonologTarget::class, 'channel' => 'myFirstChannel', 'levels' => ['error', 'warning'] ], ] ] ] ]
在这种情况下,所有 Yii 的日志记录器消息将通过 myFirstChannel
日志记录器的处理器/处理器堆栈进行传输,而不会触及任何现有代码。
\Yii::warning('hello'); \Yii::error('world!');
如果您省略通道配置,目标将使用组件中配置的主通道。
独立使用组件
如果您根本不想使用 Yii 的日志记录器,则可以将此组件作为完全独立的日志记录器使用。
从组件中获取特定的日志记录器
$myChannelLogger = Yii::$app->monolog->getLogger('myChannel'); $myChannelLogger->critical('help me!'); $mainChannelLogger = Yii::$app->monolog->getLogger(); $mainChannelLogger->notice('This was a log message through the main channel');
由于主通道注册为 Psr\Log\LoggerInterface
的实现,您也可以在控制器中使用构造函数注入
class SuperController { private $logger; public function __construct($id, $module, LoggerInterface $logger, $config = []) { $this->logger = $logger; parent::__construct($id, $module, $config); } public function actionExample() { $this->logger->notice('Action Example was called'); } }