今天做数据修复的时候,需要将处理过的跟未处理过的数据记录到文件中,突然想到,这不就是日志系统嘛,所以就花点时间将接触过的日志框架组件类包整理总结一下,之前也没这么静下来认真的做过总结,只是一味的拿来主义。其实写这篇博客也借鉴了好多大神的博客,感谢他们的无私分享。
OK,开始吧,日志记录其实就是文件操作。所以,自己写了个小方法,简易实现了一下,如下
上面这方法,一个文件追加满足日常日志记录,但太过于粗糙,也因此激发了我对日志记录框架的兴趣,想一探究竟。
自己接触过的日志类包或框架:commons-logging、log4j、logback、logstash,我们都来看看。
1. commons-logging
简介
commons-logging 应该是学习日志系统最早接触到类库,是Apache commons类库中的一员。
commons Logging(JCL)提供的是一个日志(Log)接口(interface),同时兼顾轻量级和不依赖于具体的日志实现工具。它提供给中间件/日志工具开发者一个简单的日志操作抽象,允许开发人员使用不同的具体日志实现工具。
commons-logging 本身日志功能很弱,只一个简单的SimpeLog,所以一般结合log4j使用。
commons-logging 提供了一个统一的日志接口,配置文件可缺省,简化操作,将项目与环境中日志系统解耦。
加载配置机制
commons-logging可以自动扫描classpath下文件:按以下顺序匹配选择实现类(官网翻译,可能有误,欢迎指正)
(1) 找一个叫org.apache.commons.logging.Log的工厂属性。
可以通过Java代码显示设置配置属性---classpath下放一个commons-logging.properties配置文件即可。
当找到不止一个properties文件时候,使用第一个找到的文件。在文件中定义所需属性
(2) 当(1)未找到,则继续查找是否有org.apache.commons.logging.Log类,在类中定义属性
(3) 当classpach中有Log4j包时,使用相应的wrapper类(Log4JLogger)
(4) 当应用程序运行在jdk1.4上面,貌似只能使用jdk自己的包装(wrapper)类(jdk14Logger)
(5) 若以上步骤都未能匹配到,则只能使用自己提供的日志包装类 SimpeLog
commons-logging能够选择使用Log4j还是JDK Logging,但不依赖Log4j,JDK Logging的API。使用commons-logging能够灵活的选择使用那些日志方式,而且不需要修改源代码。
源码详解剖析参考,要感谢下面这些博主:
ref: http://blog.csdn.net/u011794238/article/details/50749260
ref: http://blog.csdn.net/wiker_yong/article/details/23551209
2. log4j
官方介绍---why log4j ?
使用log4j可以在运行时启用日志记录,而无需修改应用程序二进制文件。log4j包的设计是为了使这些语句,能保留在附带的代码中,不产生很大的性能损失。可在配置文件中调整日志记录级别debug-info,无需重启应用。... ...
log4j 的一个显著特点就是在日志记录器继承的概念。使用到日志层次机构,让日志可以在更细的任务中输出... ...
结合commons-logging 集成 log4j 配置
(1) log4j.configuration = log4j.properties 使用该配置Log4j属性文件名,默认名为log4j.properties
(2) log4j.rootCategory = priority[,appender]* 设置缺省日志记录器优先级
(3) log4j.log.logger.name = priority 设置日志记录器优先级,所有日志记录器级别都低于指定的日志记录器。
通过LogFactory.getLog(logger.name) 获取指定名字的实例,优先级可:DEBUG/INFO/WARN/ERROR/FATAL
通过log4j.logger.org.apache.component = DEBUG,可让所有Component类输出日志,别的Apache项目除外
(4) log4j.appender.appender.Threshold = priority 可以将日志输出到指定不同的设备,日志类型《= 指定优先级
配置参考资料,要感谢下面这些博主
ref: http://www.codeceo.com/article/log4j-usage.html
ref: https://my.oschina.net/zimingforever/blog/98048
ref: http://blog.csdn.net/u011794238/article/details/50742658
ref: http://blog.csdn.net/u011794238/article/details/50747953
3. logback + SLF4J
简介
logback是log4j的升级版,有点太多太多,而SLF4J和LogBack还都是出自Log4J的创始人Ceki Gülcü之手,貌似现在好多项目都用到logback,需要结合slf4j一块使用。
算啦,此部分,找到两篇博客,详细完美到佩服,不再赘述了,反正就是棒,实现了自动压缩归档等等。
不过,使用slf4j(java简单日志门面),使用的时候,注意选择正确的桥接包。
ref: http://blog.csdn.net/yycdaizi/article/details/8276265
参考资料,感谢下面这些博主
ref: http://www.cnblogs.com/warking/p/5710303.html
ref: https://www.oschina.net/translate/reasons-to-prefer-logbak-over-log4j
ref: http://blog.csdn.net/liubo2012/article/details/46337063Slf4j MDC+logback分析
ref: http://blog.csdn.net/sunzhenhua0608/article/details/29175283
ref: https://logback.qos.ch/manual/mdc.html#autoMDC官网MDC教程
下面是自己使用logback + slf4j 实现自定义日志属性输出及心得
先将 logback.xml 配置贴上来
4. logstash 分布式日志收集
这个就厉害了,但是我还不太了解,不过,稳住,我们能赢,后面我先学习一下,再来更新,^_^、先看看下面的教程吧......
ref: http://udn.yyuap.com/doc/logstash-best-practice-cn/index.html