系统日志让你了解系统内部发生了什么,当出现故障时首先想到的就是日志,drupal日志系统可以按信息类别分别记录日志,并且按照RFC 5424和PSR-3将各类信息按紧迫程度划分为8个级别,这样方便筛选查看;除此外你只需进行简单实现就可在系统发生严重问题时得到及时通知,比如数据库连接不上或系统不可用时发送手机短信给你,本篇将介绍这些。
日志等级:
依据日志重要性(或严重程度)将信息分为如下8个级别:
emergency:系统不可用,非常严重
alert:严重警告,必须立即处理
critical:临界情况,快到危险的边缘
error:错误,应该注意监控
warning:警告,比如使用了被弃用的方法
notice:正常信息,需要通知
info:正常信息,如用户登录等
debug:调试信息,非常详细
以上级别用数字表示为从0到7(数字越小越严重),他们被定义或描述在RFC 5424和PSR-3中,见以下资料:
http://tools.ietf.org/html/rfc5424
https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md
drupal日志系统概述:
系统中记录的日志信息各种各样,需要被归类,在drupal中“类别”称为“频道channel”,每个频道对应一个频道对象,我们可以从日志工厂中通过频道名实例化一个频道对象,频道名可以由开发者自定义,频道对象是使用日志系统的入口;在底层日志信息是通过记录器Logger处理的,每个频道对象可以有多个记录器,她们按优先级依次执行,频道对象提供给用户统一的使用接口,接到调用后将数据发给每一个记录器,系统默认只实现了一个记录器,她负责将日志写入数据库,我们可以定义额外的记录器用来做别的事情,比如依据重要级别发送邮件或短信等。
日志工厂:
负责实例化频道对象
服务名:logger.factory
类:\Drupal\Core\Logger\LoggerChannelFactory
得到工厂对象: \Drupal::service("logger.factory");
得到频道对象:\Drupal::service("logger.factory")->get($channel);
得到频道对象的快捷方法:\Drupal::logger($channel);
在容器编译阶段系统会收集所有标签为“logger”的服务(也就是记录器),在工厂对象实例化时她们会被注入,在运行过程中也可以调用如下代码添加更多记录器:
addLogger(LoggerInterface $logger, $priority = 0)
在实例化频道对象时,工厂会将所有的记录器传给她,这里需要注意:频道对象也有同名方法用以添加记录器,在工厂对象上添加和在频道对象上添加是有区别的,若在工厂对象上添加,那么所有频道对象都会被添加,且已经实例化的所有频道对象都会被添加该记录器,但如果在频道对象上调用添加记录器,那么其他频道对象不会被添加
频道对象:
这是我们使用日志系统的统一接口,类定义如下:
\Drupal\Core\Logger\LoggerChannel