davidburger/expressive-logger

Monolog Zend Expressive 集成

v1.9.4 2017-05-04 13:39 UTC

This package is not auto-updated.

Last update: 2024-09-23 11:50:44 UTC


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)

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,
        ],
    ]
]