webiny / logger
Webiny Logger 组件
Requires
- php: ^7
- psr/log: ~1.0
- webiny/config: ~1.6
- webiny/event-manager: ~1.6
- webiny/service-manager: ~1.6
- webiny/std-lib: ~1.6
- webiny/storage: ~1.6
Requires (Dev)
- mybuilder/phpunit-accelerator: dev-master
- phpunit/phpunit: ~6
README
Logger 组件用于记录数据。您可以将任何内容记录到任何目的地,您需要做的就是为您的日志驱动程序创建一个 handler
。此组件受到了 https://github.com/Seldaek/monolog 库的极大启发(如果您之前使用过该库,这个组件对您来说非常熟悉)。您可能会说它完全相同,但我们发现了一些我们想要更改/改进的地方,例如拥有具有适当获取器和设置器的 Record
类,我们更改了一些方法命名、处理逻辑和其他细节,以更好地适应我们的框架。我们确实缺少一些内置的处理程序、格式化和处理程序,但这将会随着时间的推移而实现。
安装组件
安装组件的最佳方式是使用 Composer。
composer require webiny/logger
要查看包的额外版本,请访问Packagist 页面。
驱动程序
内置驱动程序包括
Null
Webiny
Null
驱动程序用于在不更改代码的情况下关闭日志记录。您只需更改配置以使用 Null
驱动程序,所有日志调用都将发送到空白处。Webiny
驱动程序包含您可能需要的所有日志记录功能,因此默认使用该驱动程序。
Logger 组件使用 PSR-3 日志接口和 PSR-3 日志级别。所有日志级别常量都位于 LoggerLevel
类中。话虽如此,您可以为您的日志驱动程序创建自己的驱动程序,该驱动程序甚至没有处理程序、格式化程序或任何类似的东西。只需实现日志接口,其余的由您自己决定。如果您喜欢 Monolog 概念,那么 Webiny
驱动程序就是您的选择。
Logger 设置
以下是一个示例日志服务设置,它使用 FileHandler
、两个处理程序和一个 FileFormatter
。配置文件的结构与其他所有注册服务的 Webiny 组件相同。
Logger: Parameters: Logger.Class: \Webiny\Component\Logger\Logger Logger.Driver.Class: \Webiny\Component\Logger\Driver\Webiny Logger.Processor.FileLine.Class: \Webiny\Component\Logger\Driver\Webiny\Processor\FileLineProcessor Logger.Processor.MemoryUsage.Class: \Webiny\Component\Logger\Driver\Webiny\Processor\MemoryUsageProcessor Logger.Formatter.File.Class: \Webiny\Component\Logger\Driver\Webiny\Formatter\FileFormatter Logger.Handlers.File.Class: \Webiny\Component\Logger\Driver\Webiny\Handler\FileHandler Services: MyFileLogger: Class: %Logger.Class% Arguments: [System, %Logger.Driver.Class%] Calls: - [addHandler, [@Logger.LogHandler]] LogFile: Class: \Webiny\Component\Storage\File\File Arguments: Key: Development/Log.txt Storage: @Storage.Logger # Define this service in your Storage configuration LogHandler: Class: %Logger.Handlers.File.Class% Arguments: [@Logger.LogFile, [], true, false] Calls: - [addProcessor, [%Logger.Processor.FileLine.Class%]] - [addProcessor, [%Logger.Processor.MemoryUsage.Class%]] - [setFormatter, [%Logger.Formatter.File.Class%]] Configs: Formatter: Default: DateFormat: 'H:i:s d-m-Y' File: RecordFormat: '%datetime% [%loggerName%] [%level%]: %message%\nContext: %context%\nExtra: %extra%\n\n' ClassLoader: Psr: '../Psr'
注意:在我们的示例中(LogHandler 服务)的 FileHandler
(日志处理程序服务)将 File
作为第一个参数。我们只能使用 Storage
组件写入文件,因此我们需要一个提供 File
实例的服务。
在 PHP 中使用您的日志记录器
// Set component config Logger::setConfig($pathToYourConfigFile); // Now your logger exists in the system as a 'MyFileLogger' service. // You can use it by either using a LoggerTrait... $logger = $this->logger('MyFileLogger'); $logger->info('This is pretty simple!'); // ... or by using ServiceManagerTrait. Note that ServiceManager groups services by component // So your service is called 'Logger.MyFileLogger'. When using LoggerTrait, it appends the service group for you. $logger = $this->service('Logger.MyFileLogger'); $logger->warn('This is just a little bit longer...');
日志设置和处理逻辑背后的逻辑
- 创建日志实例
- 创建处理程序实例(您可以在您的日志记录器中拥有多个处理程序)
- 将处理程序和格式化程序添加到您的处理程序实例中
- 将处理程序添加到您的日志记录器中
- 使用您的日志记录器
当您记录一条消息时,它将经过每个处理程序,然后每个处理程序将其传递给每个处理程序。格式化程序是最后一个改变记录的东西。它只是将记录格式化为适合处理程序的格式。它可能是字符串、数组等。在处理过程的最后 - 处理程序将格式化后的记录写入目的地(无论是文件、数据库、电子邮件、套接字等)
资源
要运行单元测试,您需要使用以下命令
$ cd path/to/Webiny/Component/Logger/
$ composer.phar install
$ phpunit