您的位置:首页 > 其它

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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  文档 monolog-ph