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内置很多很实用的handler,它们几乎囊括了各种的使用场景,这里介绍一些使用的:

StreamHandler:把记录写进PHP流,主要用于日志文件。

SyslogHandler:把记录写进syslog。

ErrorLogHandler:把记录写进PHP错误日志。

NativeMailerHandler:使用PHP的mail()函数发送日志记录。

SocketHandler:通过socket写日志。
AmqpHandler:把记录写进兼容amqp协议的服务。

BrowserConsoleHandler:把日志记录写到浏览器的控制台。由于是使用浏览器的console对象,需要看浏览器是否支持。

RedisHandler:把记录写进Redis。

MongoDBHandler:把记录写进Mongo。

ElasticSearchHandler:把记录写到ElasticSearch服务。

BufferHandler:允许我们把日志记录缓存起来一次性进行处理

同样的,这里介绍几个自带的Formatter:

LineFormatter:把日志记录格式化成一行字符串。

HtmlFormatter:把日志记录格式化成HTML表格,主要用于邮件。

JsonFormatter:把日志记录编码成JSON格式。

LogstashFormatter:把日志记录格式化成logstash的事件JSON格式。

ElasticaFormatter:把日志记录格式化成ElasticSearch使用的数据格式。

Processor
前面说过,Processor可以为日志记录添加额外的信息,Monolog也提供了一些很实用的processor:

IntrospectionProcessor:增加当前脚本的文件名和类名等信息。

WebProcessor:增加当前请求的URI、请求方法和访问IP等信息。

MemoryUsageProcessor:增加当前内存使用情况信息。

MemoryPeakUsageProcessor:增加内存使用高峰时的信息。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值