随着系统和业务的复杂度提升我们会对日志进行各种分类处理如通过日志的级别分类或是对不同的业务的日志进行分类处理,即使面对以上的需要我们仍然需要有一个统一的日志格式,这样就需要我们有一个标准的日志模块来完成这些工作,然而我们也希望这个日志模块是性能优良且方便易用的。
Java有一个比较出名的日志组件log4j,PHP语言也有类似的日志框架,同样来自于Apache的log4php是一个多功能的为PHP使用的日志框架。和log4j类似,通过log4php我们也可以控制日志信息输送的目的地是控制台、文件、数据库甚至是套接口服务器、syslog守护进程等,同样我们也可以控制每一条日志的输出格式;通过定义日志信息的级别,我们能够更加有效细致地控制日志的生成过程。更加惊喜的是以上叙述的这些功能甚至不需要我们修改代码,而是通过一个配置文件来灵活地进行配置。
安装介绍
log4php提供了两种安装方式,一是通过直接下载源码包,Apache log4php - Download;二是通过PEAR渠道安装。
PEAR方式安装命令
pear channel-discover pear.apache.org/log4php
pear install log4php/Apache_log4php
目录结构
├───apidocs - API生成文档
└───src├───assembly - Maven的配置
├───changes - 更新日志
├───examples - 各种用法示例
├───main
│ └───php - 主要源码
├───site - 网站源码
└───test - 单元测试
配置介绍
log4php支持XML、PHP以及Properties三种配置文件,我们今天主要通过Properties方式的配置文件来讲解,此种方式的配置较为全面。如果不在日志记录前调用Logger::configure()方法进行配置,log4php使用默认方式进行配置
日志输出方式
名称 介绍
LoggerAppenderConsole 控制台,标准输出或标准错误流。
LoggerAppenderEcho 控制台,通过PHP的echo方式输出
LoggerAppenderFile 文件
LoggerAppenderDailyFile 文件(通过日志生成新文件)
LoggerAppenderRollingFile 文件 (通过尺寸设置生成新的日志文件).
LoggerAppenderMail 通过电子邮件发送日志,整个日志在一个电子邮件发送。
LoggerAppenderMailEvent 通过电子邮件发送日志,每条日志通过单独的电子邮件发送。
LoggerAppenderMongoDB MongoDB
LoggerAppenderNull 忽略所有的日志事件
LoggerAppenderPDO 数据库
LoggerAppenderPhp 通过使用PHP trigger_error()函数PHP用户级的消息
LoggerAppenderSocket 通过套接口输出日志
LoggerAppenderSyslog syslog
日志内容输出格式方式
名称 介绍
LoggerLayoutHTML 输出到HTML表格中
LoggerLayoutPattern 灵活格式,通过一个字符串配置
LoggerLayoutSimple 简单格式,不可配置
LoggerLayoutSerialized 输出序列化对象
LoggerLayoutTTCC 包括时间,主题,类别和嵌套诊断上下文的 (不建议使用)
LoggerLayoutXml 输出到XML文件
示例说明
示例一
配置示例
;定义输出方式名称default
log4php.appender.default = LoggerAppenderEcho
log4php.appender.default.layout = LoggerLayoutSimple;定义一组新的输出方式名称为test
;日志输出方式设置
log4php.appender.test = LoggerAppenderDailyFile
;日志内容格式设置
log4php.appender.test.layout = LoggerLayoutPattern
;日志内容参数设置(日期 PID 日志级别 日志名称 日志文本 换行符)
log4php.appender.test.layout.ConversionPattern = "%d{Y-m-d H:i:s.u} [%t] %p %c: %m%n"
;日志文件名称配置
log4php.appender.test.datePattern = Ymd
;日志文件路径配置
log4php.appender.test.file = /var/log/daily_%s.log;日志输出方式以及输入级别设置
log4php.rootLogger = DEBUG, default如果设置为已下值,日志可同时使用default和test两个输出定义进行记录
log4php.rootLogger = DEBUG, default,test
代码示例
<?php
require_once dirname(__FILE__) . '/log4php/main/php/Logger.php';
Logger::configure(dirname(__FILE__) . '/log4php.properties');
$logger = Logger::getLogger('exception');
$message = 'hello world!';
$logger->error('error,' . $message);//会产生记录
$logger->info('info,' . $message);//会产生记录
$logger->trace('trace,' . $message);//不会产生记录,因为设置的日志级别DEBUG,只有高于等于DEBUG级别的日志才会记录
输出示例
2016-12-15 16:25:55.55 [121215] ERROR exception: error,hello world!
2016-12-15 16:25:55.55 [121215] INFO exception: info,hello world!
示例二
配置示例
;定义输出方式名称default
log4php.appender.default = LoggerAppenderEcho
log4php.appender.default.layout = LoggerLayoutSimple;定义一组新的输出方式名称为test
;日志输出方式设置
log4php.appender.test = LoggerAppenderDailyFile
;日志内容格式设置
log4php.appender.test.layout = LoggerLayoutPattern
;日志内容参数设置(日期 PID 日志级别 日志名称 日志文本 换行符)
log4php.appender.test.layout.ConversionPattern = "%d{Y-m-d H:i:s.u} [%t] %p %c: %m%n"
;日志文件名称配置
log4php.appender.test.datePattern = Ymd
;日志文件路径配置
log4php.appender.test.file = /var/log/test_daily_%s.log
;日志输出方式以及输入级别设置
log4php.logger.test = INFO, test;定义一组新的输出方式名称为pro
;日志输出方式设置
log4php.appender.pro = LoggerAppenderDailyFile
;日志内容格式设置
log4php.appender.pro.layout = LoggerLayoutPattern
;日志文内容式参数配(日期 PID 日志级别 日志名称 日志文本 换行符)
log4php.appender.test.layout.ConversionPattern = "%d{Y-m-d H:i:s.u} [%t] %p %c: %m%n"
;日志文件名称配置
log4php.appender.pro.datePattern = Ymd
;日志文件路径配置
log4php.appender.pro.file = /var/log/pro_daily_%s.log
;日志输出方式以及输入级别设置
log4php.logger.pro = INFO, pro
代码示例
<?php
require_once dirname(__FILE__) . '/log4php/main/php/Logger.php';
Logger::configure(dirname(__FILE__) . '/log4php.properties');/*
* 使用名称为test的方式处理日志
*/
$logger = Logger::getLogger('test');
$message = 'hello world!';
$logger->error($message);//会产生记录/*
* 使用名称为pro的方式处理日志
*/
$logger = Logger::getLogger('pro');
$message = 'Hey, beautiful!';
$logger->error($message);//会产生记录
输出示例
/var/log/test_daily_20161215.log文件
2016-12-15 16:25:55.55 [121215] ERROR test: hello world!
/var/log/pro_daily_20161215.log文件
2016-12-15 16:25:55.55 [121215] ERROR test: Hey, beautiful!
log4php的配置文件十分灵活和简单,以上的只是很简单的两个示例,还不能全面的展示出来log4php配置方面的简单易用以及灵活性,仍然希望这能够对大家有所帮助,log4php的官方提供了良好的文档以及十分丰富的API,几乎满足了我们对于日志模块需要的全部需求,大家也可以通过查阅相关文档调整配置做出自己需要的日志模块。
log4php文档地址:http://logging.apache.org/log4php/index.html
希望这篇文章对你有所帮助,如果没有任何帮助抱歉浪费了你的阅读时间但是我不负任何责任,如有不足支持还望指出