博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java的几个日志框架log4j、logback、common-logging
阅读量:5026 次
发布时间:2019-06-12

本文共 2660 字,大约阅读时间需要 8 分钟。

开发工作中每个系统都需要记录日志,常见的日志工具有log4j(用的最多),slf4j,commons-loging,以及最近比较流行的logback
以前只是在项目中用log4j,更多的是参考下配置文档,没有对日志系统做过系统的学习,这里简单列一下各种日志框架的优缺点 log4j Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务 器、NT的事件记录器、 UNIX Syslog守护进程等;用户也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,用户能够更加细致地控制日志的生成过程。 这些可以通过一个 配置文件来灵活地进行配置,而不需要修改程序代码。 logback Logback是由log4j创始人设计的又一个开源日记组件。logback当前分成三个模块:logback-core,logback- classic和logback-access。 logback-core是其它两个模块的基础模块。logback-classic是log4j的一个 改良版本。此外logback-classic完整实现SLF4J API使你可以 很方便地更换成其它日记系统如log4j或JDK14 Logging。logback-access访问模块与Servlet容器集成提供通过Http来访问日记的功能。 slf4j 简单日记门面(Facade)SLF4J是为各种loging APIs提供一个简单统一的接口,从而使得最终用户能够在部署的时候配置自己希望的loging APIs实现。 Logging API实现既可以选择直接实现SLF4J接的loging APIs如: NLOG4J、SimpleLogger。也可以通过SLF4J提供的API实现来开发相应的适配器 如Log4jLoggerAdapter、JDK14LoggerAdapter。 Apache Common-Logging  目前广泛使用的Java日志门面库。通过动态查找的机制,在程序运行时自动找出真正使用的日志库。但由于它使用了ClassLoader寻找和载入底层的日志库,
导致了象OSGI这样的框架无法正常工作,由于其不同的插件使用自己的ClassLoader。 OSGI的这种机制保证了插件互相独立,然而确使 Apache Common-Logging无法工作。 由于log4j比较主流,今天主要讲一下从log4j切换到logback log4j切换到logback的步骤:1.将logback-classic和logback-core的jar包引入到工程,将有关log4j的jar包从工程的classpath中移除。2.确认工程引入了slf4j的jar包,作为日志的适配。3.在工程中新建logback.xml文件,利用转换工具(地址:http://logback.qos.ch/translator/),将原来log4j配置文件(log4j.properties)的内容拷贝到转换工具中,转换为logback的对应配置,然后将转换后的内容存入logback.xml。
4.完成上述转换后,因为参数含义不同,要修改一些细微的地方:

配置内容

logback

log4j

%c{}

{0}打印类名,例:MyLog

{n}打印类名和包名的首字母,例:c.b.u.MyLog

{0}打印全路径类名,例:com.bs3.utils.MyLog

{1}打印类名,例:MyLog

{2}打印类名和上一层包名,例;utils.MyLog

{n}依此类推

日志文件名称样式

<File>log/rpt.log</File>

<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

<fileNamePattern>log/rpt.log.%d{yyyyMMddHH}</fileNamePattern>

</rollingPolicy>

<!-- 去掉了'.' -->

log4j.appender.RPT.File        = log/rpt.log

log4j.appender.RPT.DatePattern    ='.'yyyyMMdd

 

配置内容
logbacklog4j%c{}{
0}打印类名,例:MyLog{n}打印类名和包名的首字母,例:c.b.u.MyLog{
0}打印全路径类名,例:com.bs3.utils.MyLog{
1}打印类名,例:MyLog{
2}打印类名和上一层包名,例;utils.MyLog{n}依此类推日志文件名称样式
log/rpt.log
log/rpt.log.%d{yyyyMMddHH}
log4j.appender.RPT.File = log/rpt.loglog4j.appender.RPT.DatePattern ='.'yyyyMMdd

 

5.将工程中,由于缺失了log4j.jar引起的错误进行修正,改为利用logback实现。 可能遇到的问题及解决方案:1.Log4j转换到logback后,运行后spring的日志都以红字输出到控制台,而不受logback控制。因为Spring的日志默认采用commons-logging,解决方法是在工程中引入jcl-over-slf4j-1.6.1.jar,这样就将commons-logging与slf4j对接,再通过logback进行了日志的统一输出。2.切换完成后,启动工程时会出现java.lang.IllegalAccessError: tried to access field org.slf4j.impl.StaticLoggerBinder.SINGLETON from class org.slf4j.LoggerFactory这个错误。原因是slf4j-api的jar包版本太低,改为slf4j-api-1.6.4.jar即可解决。maven仓库地址:
 

版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://www.cnblogs.com/weiguo21/p/4823988.html

你可能感兴趣的文章
初学sql server 2008之触发器
查看>>
WCF入门(四)——流传输
查看>>
第二阶段站立会议01
查看>>
(LightOJ 1004) Monkey Banana Problem 简单dp
查看>>
2. C语言文件操作经典习题
查看>>
学习Raft算法的笔记
查看>>
MOD 10,11算法(GB/T 17710-1999 数据处理 校验码系统 ),使用javascript实现
查看>>
#Leetcode# 692. Top K Frequent Words
查看>>
NYoj_49开心的小明
查看>>
团队进展(持续更新中)
查看>>
linux基础命令1
查看>>
计算机安装了IE8一半退出重启时,桌面只显示背景
查看>>
"模仿"还是"创新"
查看>>
Linux内核设计与实现 第一章 第二章
查看>>
hiho 第118周 网络流四·最小路径覆盖
查看>>
vc 10进制与2 8 16进制相互转换
查看>>
ECMAscript一些方法的使用
查看>>
菜根谭#49
查看>>
一步一步教你使用Ninject进行依赖注入
查看>>
WCF服务开发与调用的完整示例
查看>>