davidburger / expressive-logger
Monolog Zend Expressive 集成
v1.9.4
2017-05-04 13:39 UTC
Requires
- php: >=7.0.0
- container-interop/container-interop: ^1.1
- monolog/monolog: ^1.19
- psr/log: ^1.0
README
Monolog 的 Zend Expressive 实现 (https://github.com/Seldaek/monolog/)
安装
composer require davidburger/expressive-logger
设置
cd <project_root> cp vendor/davidburger/expressive-logger/config/errorlog.global.php.dist config/autoload/errorlog.global.php
- 编辑 config/autoload/errorlog.global.php 文件并设置所需内容
配置指令
registerErrorHandler (默认值:false)
- 如果启用,将在日志初始化后调用 \Monolog\ErrorHandler::register() 方法来设置 PHP 错误处理器,有关详细信息请参阅 https://php.ac.cn/manual/en/ref.errorfunc.php
ignoredExceptionClasses (默认值:[])
- 不会被定义的错误处理器记录的异常类名
useIgnoreLogic (默认值:false)
- false = 所有错误都将被记录
- true = ignoredExceptionClasses 数组中定义的类和实现了 ExpressiveLogger\Exception\NotLoggableInterface 的实例将被日志记录器忽略
useFacade (默认值:true)
- 将为静态调用注册记录器 - 见下文。
exceptionFormatterCallback (默认值:null)
- 在调用 Monolog\Logger::error($message, $context) 之前,用于格式化异常消息和确定上下文的回调函数
- 如果两者都定义了,优先级高于
messageFormatter - 配置示例
'exceptionFormatterCallback' => function($exception, &$context) { if (true === empty($context)) { $context = ['exception' => $exception]; } return sprintf('Exception %s: "%s" at %s line %s', get_class($exception), $exception->getMessage(), $exception->getFile(), $exception->getLine() ); },
messageFormatter (默认值:null)
- 在调用 Monolog\Logger::error($message) 之前用于格式化错误消息的类(对于异常非常有用)
- 如果两者都定义了,优先级低于
exceptionFormatterCallback - 可以编写和使用自定义格式化程序,实现
\ExpressiveLogger\MessageFormatter\MessageFormatterInterface - 配置示例
'messageFormatter' => \ExpressiveLogger\MessageFormatter\DefaultFormatter::class
使用
引导初始化
<?php require __DIR__ . '/vendor/autoload.php'; /** @var \Interop\Container\ContainerInterface $container */ $container = require __DIR__ . '/config/container.php'; $factory = new \ExpressiveLogger\LoggerFactory(); $logger = $factory($container);
静态调用
use ExpressiveLogger\LoggerFacade; //.. try { } catch(RuntimeException $e) { LoggerFacade::error($e); }
Monolog 处理器配置
RedisHandler
'dependencies' => [ 'factories' => [ \Monolog\Handler\RedisHandler::class => \ExpressiveLogger\Factory\RedisHandlerFactory::class, ], ], 'expressiveLogger' => [ 'handlers' => [ 'redis' => [ 'client' => 'redisClient', //name of redis instance available via container 'key' => 'logstash', 'level' => Logger::DEBUG, ], ] ]