monolog文档解读
2016-07-30 09:00
274 查看
monolog文档解读
最近在学习monolog,贴一份自己的对文档的理解1.核心概念
每个logger实例都有一个通道和日志处理栈,当你向logger添加一条记录时,它会开始遍历处理栈直到被完全处理。
这样提供了很灵活的记录步骤:例如在栈底的StreamHandler类将记录所有的信息到磁盘,在这个类上面添加一个MailHandler的类,其将在记录下一个ERROR日志时发送邮件。处理类同时还有一个bubble属性,它定义了该类在处理记录时是否阻止了它向下传递。在本例子中,将MailHandler的bubble属性置false意味着被该类处理的记录将不会再向StreamHandler传递。
你可以建立许多的Logger,每个都定义了一个通道,每个都有各种可被共享的处理器。
同时每个logger还有一个带默认值的Formmater,用来定义记录日志的格式
2.日志等级
monolog定义了多个日志等级:DEBUG(100)~~~等
3.配置一个日志
下面是一个记录日志文件基础的步骤
<?php use Monolog\Logger; use Monolog\Handler\StreamHandler; use Monolog\Handler\FirePHPHandler; // 创建一个Logger $logger = new Logger('my_logger'); // 添加一些日志处理类 $logger->pushHandler(new StreamHandler(__DIR__.'/my_app.log', Logger::DEBUG)); $logger->pushHandler(new FirePHPHandler()); // 使用你的Logger $logger->addInfo('My logger is now ready');
第一步是建立你要使用的Logger(参数是通道的名字),Logger类自己并不知道如何处理一条记录,而是依赖于一些Handler,上文的代码中注册了两个处理器到处理栈中,以便于通过两种不同的方式来处理一条记录。注意:FirePHPHandler先被调用,因为它被添加到了栈的上面。
3.向记录中添加额外的数据
3.1 第一个方式是使用日志上下文。在记录中以数组的形式传递数据:
<?php $logger->addInfo('Adding a new user', array('username' => 'Seldaek'));
3.2 第二个方式是使用processor
<?php $logger->pushProcessor(function ($record) { $record['extra']['dummy'] = 'Hello world!'; return $record; });
monolog提供了一些内置的Processor。
4.交互通道
当两个通道共用一个Handler,在用这个Handler记录日志时,使用通道能够让我们识别出是那个logger处理的。我们可以在简单的在这个文件中过滤这个或者那个通道。
<?php use Monolog\Logger; use Monolog\Handler\StreamHandler; use Monolog\Handler\FirePHPHandler; // 创建一些处理类 $stream = new StreamHandler(__DIR__.'/my_app.log', Logger::DEBUG); $firephp = new FirePHPHandler(); // 为应用创建主要的log $logger = new Logger('my_logger'); $logger->pushHandler($stream); $logger->pushHandler($firephp); //用另外的通道创建一个安全相关材料的log $securityLogger = new Logger('security'); $securityLogger->pushHandler($stream); $securityLogger->pushHandler($firephp); //或者通过克隆一个之前的log改变通道的名字 $securityLogger = $logger->withName('security');
5.定制日志格式
大多数处理器使用$record[‘formatted’]的值来自动作为记录策略,这个值依赖fomatter的设定
// the default date format is "Y-m-d H:i:s" $dateFormat = "Y n j, g:i a"; // the default output format is "[%datetime%] %channel%.%level_name%: %message% %context% %extra%\n" $output = "%datetime% > %level_name% > %message% %context% %extra%\n"; // finally, create a formatter $formatter = new LineFormatter($output, $dateFormat); // Create a handler $stream = new StreamHandler(__DIR__.'/my_app.log', Logger::DEBUG); $stream->setFormatter($formatter); // bind it to a logger object $securityLogger = new Logger('security'); $securityLogger->pushHandler($stream);
formatter 是可以在N个 Handler 之间复用的,并且可在N个 Logger 之间共享 Handler。
相关文章推荐
- jpcsp源码解读之一:源码的获取与编译,以及psp详尽硬件信息文档
- maven私服 nexus2.x工作目录解读(翻译文档)
- 初窥 CGAffineTransform 文档解读
- tensorflow中的seq2seq文档解读
- 小程序开发指南,官方文档解读【收藏】
- TensorFlow 官方文档中文版解读之2——tf.sparse_to_dense的用法
- OpenCV基础入门 基于官方文档解读(2)--OpenCV基础特性
- AngularJS1.X学习笔记14-动画(解读文档)
- vue-resource文档详细解读
- openWRT自学---对官方的开发指导文档的解读和理解 记录3:一些常用方法
- Cairngorm文档--简单示例程序解读
- TensorFlow 官方文档中文版解读之1 ——tf.concat的用法的用法
- linux账号相关文档解读
- 蓝牙官方文档解读
- 解读angular2官方文档的“快速上手“章节的开发环境,进行配置启动项目(图文)
- XML文档 标签解读
- Android外部存储 - 官方文档解读
- Vue.js组件官方文档解读1
- 支付宝接口程序、文档及解读(ASP.NET)
- 支付宝接口程序,文档,及解读;