dwendrich / monolog-config

通过laminas-servicemanager简单集成可配置的monolog实例。

2.0.0 2022-03-24 11:12 UTC

This package is auto-updated.

Last update: 2024-09-24 17:00:57 UTC


README

使用laminas-servicemanager将可配置的monolog实例简单集成到应用程序中。

Coverage Status Latest Stable Version

基于https://github.com/neeckeloo/MonologModule

要求

安装

MonologConfig可以通过composer安装。有关如何获取composer或如何使用它的信息,请参阅getcomposer.org

通过命令行安装

$ php composer.phar require dwendrich/monolog-config

通过composer.json文件安装

{
    "require": {
        "dwendrich/monolog-config": "^2.0"
    }
}

要启用通过laminas-servicemanager创建日志实例,必须注册三个工厂。

例如,作为mezzio应用程序的一部分,您可以将ConfigProvider::class添加到config/config.php

$aggregator = new ConfigAggregator([
 
    MonologConfig\ConfigProvider::class,
    
    // ... other stuff goes here 

    // Load application config in a pre-defined order in such a way that local settings
    // overwrite global settings. (Loaded as first to last):
    //   - `global.php`
    //   - `*.global.php`
    //   - `local.php`
    //   - `*.local.php`
    new PhpFileProvider('config/autoload/{{,*.}global,{,*.}local}.php'),
    

    // Load development config if it exists
    new PhpFileProvider('config/development.config.php'),
], $cacheConfig['config_cache_path']);

如果您实现了一个laminas mvc应用程序,请将MonologConfig键添加到config/modules.config.php或相应的config/application.config.php模块部分。

用法

日志配置

在您的应用程序或模块配置中,只需在logger键下添加一个键到monolog部分。

例如,可以按如下方式设置具有键Application\Log的日志记录器

return [
    'monolog' => [
        'logger' => [
            'Application\Log' => [
                'channel' => 'default',
            ],
        ],
    ],
];

定义日志的最小要求是channel属性。通道用于将日志记录分配给应用程序的某些部分。

处理器配置

日志记录器本身不知道如何处理日志记录。这被委派给一个或多个处理器。有关处理器、格式化程序及其用法的更多信息,请参阅monolog文档

以下代码向日志记录器注册了两个处理器

return [
    'monolog' => [
        'logger' => [
            'Application\Log' => [
                'channel' => 'default',
                'handlers' => [
                    'stream' => [
                        'class' => \MonologConfig\Handler\RotatingFileSizeHandler::class,
                        'options' => [
                            'filename'    => 'data/log/application.log',
                            'filesize'    => 2.5,
                            'compression' => 9,
                            'level'       => Logger::DEBUG,
                        ],
                    ],
                    'fire_php' => new \Monolog\Handler\FirePHPHandler(),
                ],
            ],
        ],
    ],
];

处理器定义必须是一个包含至少一个class属性的数组或一个Monolog\Handler\HandlerInterface的实例。

添加处理器

处理器允许向日志记录添加额外信息。以下代码说明了如何添加处理器

return [
    'monolog' => [
        'logger' => [
            'Application\Log' => [
                'channel' => 'default',
                'handlers' => [
                    'stream' => [
                        'class' => StreamHandler::class,
                        'options' => [
                            'path' => 'data/log/application.log',
                            'level' => Logger::DEBUG,
                        ],
                    ],
                ],
                'processors' => [
                    UidProcessor::class,
                    new \Monolog\Processor\IntrospectionProcessor(Logger::ERROR),
                ],
            ],
        ],
    ],
];

要添加处理器,您可以使用字符串创建实例或将对象传递。为了与monolog一起工作,处理器必须是可调用的。

添加格式化程序

格式化程序用于格式化日志记录的输出。它们可以附加到处理器。

return [
    'monolog' => [
        'logger' => [
            'Application\Log' => [
                'channel' => 'default',
                'handlers' => [
                    'stream' => [
                        'class' => StreamHandler::class,
                        'options' => [
                            'path' => 'data/log/application.log',
                            'level' => Logger::DEBUG,
                        ],
                        'formatter' => [
                            'class' => LineFormatter::class,
                            'options' => [
                                'format' => "[%datetime%] %channel%.%level_name%: %message% %context% %extra%\n",
                            ],
                        ],
                    ],
                ],
            ],
        ],
    ],
];

可以通过提供一个包含class属性和可选的包含构造函数参数的options键的数组来添加格式化程序。

或者,可以将Monolog\Formatter\FormatterInterface的实例作为参数传递

return [
    'monolog' => [
        'logger' => [
            'Application\Log' => [
                'channel' => 'default',
                'handlers' => [
                    'stream' => [
                        'class' => StreamHandler::class,
                        'options' => [
                            'path' => 'data/log/application.log',
                            'level' => Logger::DEBUG,
                        ],
                        'formatter' => new LineFormatter(
                            "[%datetime%] %channel%.%level_name%: %message% %context% %extra%\n"
                        ),
                    ],
                ],
            ],
        ],
    ],
];

获取日志记录器实例

您可以通过配置键从laminas-servicemanager中检索日志记录器实例,例如

/** @var Laminas\ServiceManager\ServiceManager $container */
$logger = $container->get('Application\Log');
$logger->debug('debug message');