exileed/yii2-monolog2

Yii2 的 Monolog2 扩展

安装: 351

依赖者: 0

建议者: 0

安全: 0

星标: 1

关注者: 2

分支: 5

开放问题: 0

类型:yii2-extension

2.0.0 2021-10-26 12:28 UTC

README

Latest Stable Version Total Downloads Latest Unstable Version License test

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');
    }
}