美文网首页
logback引发的总结

logback引发的总结

作者: ahutCnRui | 来源:发表于2017-06-28 23:43 被阅读0次

今天做数据修复的时候,需要将处理过的跟未处理过的数据记录到文件中,突然想到,这不就是日志系统嘛,所以就花点时间将接触过的日志框架组件类包整理总结一下,之前也没这么静下来认真的做过总结,只是一味的拿来主义。其实写这篇博客也借鉴了好多大神的博客,感谢他们的无私分享。

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 配置贴上来

(1)  配置日志输出类型,指定appender name="自定义名称"、file 日志记录全路径、 level、以及归档备份路径等等 (2) 注册logger包装类 (3) 在需要进行日志记录的地方,从工厂中获取名为monitor的日志器

4. logstash 分布式日志收集

这个就厉害了,但是我还不太了解,不过,稳住,我们能赢,后面我先学习一下,再来更新,^_^、先看看下面的教程吧......

ref: http://udn.yyuap.com/doc/logstash-best-practice-cn/index.html

相关文章

网友评论

      本文标题:logback引发的总结

      本文链接:https://www.haomeiwen.com/subject/zimpcxtx.html