eth8505/zf3-monolog

该包已被弃用且不再维护。作者建议使用 eth8505/laminas-monolog 包。

Zend Framework 3 monolog 集成

1.0.4 2019-09-18 13:22 UTC

README

!! 该包已不再维护,请使用 eth8505/laminas-monolog 代替 !!

Eth8505\Monolog - ZF3 模块,用于将 monolog 集成到 Zend Framework v3

Eth8505\Monolog 模块通过 zendframework/zend-servicemanagermonolog/monolog 集成为 zf3 模块。

Build Status Packagist Packagist Version PHP from Packagist

安装方法

⚠️ 注意:此包需要至少 PHP 7.1。
使用 composer 安装 eth8505/zf3-monolog 包。

$ composer require eth8505/zf3-monolog

在您的 application.config.php 文件中加载模块,如下所示

<?php

return [
	'modules' => [
		'Eth8505\\Monolog',
		// ...
	],
];

使用方法

在您的应用程序配置(通常位于 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
                ]
            ]
        ]
    ]
];

或者使用名称/选项数组表示法,其中选项通过使用基于反射命名参数转换为相应类的构造函数参数。

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级,如果递归更深,将抛出Eth8505\Monolog\Exception\RuntimeException异常。

有关详细信息,请参阅示例配置

感谢

感谢neckeloo和他的Monolog Module以及enliteproEnlite Monolog,因为它们为这个模块提供了模板。