eth8505 / laminas-monolog
Laminas monolog集成
Requires
- php: ^8.1
- laminas/laminas-servicemanager: ^3.0
- laminas/laminas-stdlib: ^3.2
- monolog/monolog: ^3.0
Requires (Dev)
- phpunit/phpunit: ^10.5
README
LaminasMonolog 模块通过 laminas/laminas-servicemanager 将 monolog/monolog 集成为一个 laminas 模块。
如何安装
⚠️ 注意,此包需要至少php 7.3。
通过composer安装 eth8505/laminas-monolog
包。
$ composer require eth8505/laminas-monolog
在您的 application.config.php
文件中加载模块,如下所示
<?php return [ 'modules' => [ 'LaminasMonolog', // ... ], ];
如何使用
在您的应用程序配置(通常位于 config/autoload/monolog.global.php
)中,指定您的monolog在 monolog/loggers
键中。
配置记录器
每个键(如示例代码中的 Log\MyApp
)可以包含一个单独的记录器配置,并且可以直接通过服务管理器访问。
return [ 'monolog' => [ 'loggers' => [ 'Log\MyApp' => [ 'name' => 'default' ] ] ] ];
每个记录器配置都可以直接通过服务管理器访问。
$logger = $container->get('Log\MyApp');
添加记录处理程序
可以通过 handlers
键向记录器配置添加多个 处理程序。
return [ 'monolog' => [ 'loggers' => [ 'Log\MyApp' => [ 'name' => 'default', 'handlers' => [ 'stream' => [ 'name' => StreamHandler::class, 'options' => [ 'path' => 'data/log/myapp.log', 'level' => Logger::DEBUG ], ], 'fire_php' => [ 'name' => ChromePHPHandler:class ] ] ] ] ] ];
使用格式化程序
每个处理程序都可以配置一个 格式化程序以指定特定格式。例如,当将日志记录到 logstash 时,这可能很有用。
return [ 'monolog' => [ 'loggers' => [ 'Log\MyApp' => [ 'name' => 'default', 'handlers' => [ 'stream' => [ 'name' => StreamHandler::class, 'options' => [ 'path' => 'data/log/myapp.log', 'level' => Logger::DEBUG ], 'formatter' => [ 'name' => LogstashFormatter::class, 'options' => [ 'applicationName' => 'myApp', 'systemName' => gethostname() ] ] ] ] ] ] ] ];
使用处理器
处理器可用于通过附加数据丰富记录的数据。例如,WebProcessor 可以用于将请求 URI 和客户端 IP 添加到日志记录中。
return [ 'monolog' => [ 'loggers' => [ 'Log\MyApp' => [ 'name' => 'default' 'processors' => [ WebProcessor::class ] ] ] ] ];
特殊语法
在配置处理程序、格式化程序或处理器时,您可以通过字符串(或 ::class 常量)格式指定类名
return [ 'monolog' => [ 'loggers' => [ 'Log\MyApp' => [ 'name' => 'default' 'processors' => [ WebProcessor::class ] ] ] ] ];
或者以名称/选项数组表示法,其中选项通过使用基于 Reflection 的 命名参数 转换为相应类的构造函数参数。
return [ 'monolog' => [ 'loggers' => [ 'Log\MyApp' => [ 'name' => 'default' 'processors' => [ [ 'name' => WebProcessor::class, 'options' => [ 'extraFields' => [ 'url' => 'REQUEST_URI', 'http_method' => 'REQUEST_METHOD', 'server' => 'SERVER_NAME' ] ] ] ] ] ] ] ];
自定义处理程序、处理器和格式化程序
由于此模块通过使用 插件管理器 使用服务管理器创建一切,因此可以通过将它们添加到相应的配置键中轻松注册自定义处理程序、处理器和格式化程序。
return [ 'monolog' => [ 'formatters' => [ factories' => [ MyCustomFormatter::class => MyCustomFormatterFactory::class ] ], 'handlers' => [ 'factories' => [ MyCustomHandler::class => MyCustomHandlerFactory::class ] ], 'processors' => [ 'factories' => [ MyCustomProcessor::class => MyCustomProcessorFactory::class ] ] ] ];
⚠️ 注意,只有使用自定义工厂的格式化程序需要显式注册。任何其他配置的处理程序都将自动使用内部、基于反射的工厂创建。
扩展记录处理程序
您可以为默认记录器定义并从其他记录器继承它们。
return [ 'monolog' => [ 'loggers' => [ 'base' => [ // default logger config ], 'inherited' => [ '@extends' => 'base' ] ] ] ];
ℹ️ 尽管从版本 1.0.3 开始支持递归,但它限制为 10 级,如果递归超过 10 级,将抛出 LaminasMonolog\Exception\RuntimeException
。
有关详细信息,请参阅 示例配置。
谢谢
感谢 neckeloo 和他的 Monolog 模块 以及 enlitepro 的 Enlite Monolog,因为它们为这个模块提供了模板。