Monolog是php下比较全又容易扩展的记录日志组件。目前有包括Symfony 、Laravel、 CakePHP等诸多知名php框架都内置了Monolog。Monolog可以把你的日志发送到文件,sockets,收件箱,数据库和各种web服务器上。一些特殊的组件可以给你带来特殊的日志策略。
Symfnoy框架自带monolog,输出到项目的app/logs下。如果想在程序运行时,把一些需要的信息记录到特定的日志里,这里可以找到答案。记录log可以方便理解程序业务逻辑及流程,也给调试bug提供了查找信息。Symfony 框架将日志消息组织到频道当中。默认情况下,这里有几个频道,包括 doctrine, event, security, request 和其他的一些。频道被印在了日志消息之中并且也能够被用来指导不同的频道到不同的地方、文件。
默认情况下,Symfony记录每一条进入单一文件的消息
记录消息到不同的文件
配置service.yaml中配置
services:
_defaults:
autowire: true
autoconfigure: true
public: false
logger.win:
alias: monolog.logger.win_to_mq
public: true
配置config\packages\monolog.yaml
monolog:
channels: ["win_to_mq"]
handlers:
win_to_mq:
type: stream
path: "%kernel.logs_dir%/win_to_mq-%kernel.environment%.log"
level: debug
channels: [win_to_mq]
main:
type: fingers_crossed
action_level: error
handler: nested
channels: ["!win_to_mq"]
excluded_404s:
便可以在control中使用该log,例如
$logger = $this->container->get('logger.win');
$logger->debug(date('Y-m-d H:i:s'));
$logger->debug("MY LOG.");
$logger->debug("sql=".$sql);
打开该win_to_mq-prod.log日志,可以看到
[2013-01-14 16:13:14] my.DEBUG: 2013-01-14 16:13:14 [] []
[2013-01-14 16:13:14] my.DEBUG: MY LOG. [] []
[2013-01-14 16:13:14] my.DEBUG: sql=select * from symfony_use [] []
[2013-01-14 16:18:01] my.DEBUG: 2013-01-14 16:18:01 [] []
[2013-01-14 16:18:01] my.DEBUG: MY LOG. [] []
[2013-01-14 16:18:01] my.DEBUG: sql=select * from symfony_use [] []
[2013-01-14 16:18:13] my.DEBUG: 2013-01-14 16:18:13 [] []
[2013-01-14 16:18:13] my.DEBUG: MY LOG. [] []
[2013-01-14 16:18:13] my.DEBUG: sql=select * from symfony_use [] []
[2013-01-14 16:18:14] my.DEBUG: 2013-01-14 16:18:14 [] []
[2013-01-14 16:18:14] my.DEBUG: MY LOG. [] []
[2013-01-14 16:18:14] my.DEBUG: sql=select * from symfony_use [] []
日志级别
- DEBUG:详细的debug信息
- INFO:感兴趣的事件。像用户登录,SQL日志
- NOTICE:正常但有重大意义的事件。
- WARNING:发生异常,使用了已经过时的API。
- ERROR:运行时发生了错误,错误需要记录下来并监视,但错误不需要立即处理。
- CRITICAL:关键错误,像应用中的组件不可用。
- ALETR:需要立即采取措施的错误,像整个网站挂掉了,数据库不可用。这个时候触发器会通过SMS通知你
Handler
- Monolog内置很多很实用的handler,它们几乎囊括了各种的使用场景,这里介绍一些使用的:
- StreamHandler:把记录写进PHP流,主要用于日志文件。
- SyslogHandler:把记录写进syslog。
- ErrorLogHandler:把记录写进PHP错误日志。
- NativeMailerHandler:使用PHP的mail()函数发送日志记录。
- AmqpHandler:把记录写进兼容amqp协议的服务。
- BrowserConsoleHandler:把日志记录写到浏览器的控制台。由于是使用浏览器的console对象,需要看浏览器是否支持。
- RedisHandler:把记录写进Redis。
- MongoDBHandler:把记录写进Mongo。
- ElasticSearchHandler:把记录写到ElasticSearch服务。
- BufferHandler:允许我们把日志记录缓存起来一次性进行处理。
Formatter
- 同样的,这里介绍几个自带的Formatter:
- LineFormatter:把日志记录格式化成一行字符串。
- HtmlFormatter:把日志记录格式化成HTML表格,主要用于邮件。
- JsonFormatter:把日志记录编码成JSON格式。
- LogstashFormatter:把日志记录格式化成logstash的事件JSON格式。
- ElasticaFormatter:把日志记录格式化成ElasticSearch使用的数据格式。
Processor
- 前面说过,Processor可以为日志记录添加额外的信息,Monolog也提供了一些很实用的processor:
- IntrospectionProcessor:增加当前脚本的文件名和类名等信息。
- WebProcessor:增加当前请求的URI、请求方法和访问IP等信息。
- MemoryUsageProcessor:增加当前内存使用情况信息。
- MemoryPeakUsageProcessor:增加内存使用高峰时的信息。