Java 日志:迁移到 Logback 和 SLF4J 已翻译 100%

oschina 投递于 2013/02/19 08:30 (共 4 段, 翻译完成于 02-19)
阅读 15277
收藏 71
7
加载中

谈到在Java应用程序里写日志,log4j过去是现在可能仍然是事实上的标准。

由Sun提供的JDK内的写日志的方案一直无法全面推广。造成这种情况的原因当然是其缺乏可配置性和灵活性。JDK的日志方案对于比较简单的项目来讲当然是一种解决办法,但对于企业级的应用来讲就不然了。

现在,除了log4j之外,另有一种新的比log4j更强大、更快和更灵活的实现已经上市了:logback。好吧,实际上logback是始于2006年的,但其版本1.0在2011年11月份才发布。

fbm
fbm
翻译于 2013/02/19 16:49
2

logback开发出来就是为了替代log4j的,它和log4j都是出自同一个开发者。版本1.0经过多年的测试和开发现已可供使用了(最新版本是1.0.1)。为了避免由于其版本号这么小而造成误解,应该指出的是,logback已经在业界使用多年了,总之其版本号绝不是反映其稳定性和功能性方面的声明。

logback同log4j相比具有众多优势。下面列出一部分:

  • 更快的实现
  • 自动重新装载日志配置文件
  • 更好的过滤器(filter)
  • 自动压缩归档的日志文件
  • 堆栈跟踪里包括了Java包(jar文件)的信息
  • 自动删除旧日志归档文件
fbm
fbm
翻译于 2013/02/19 17:40
3

对于开发者来讲,从log4j转换到logback非常容易。只要在你的Maven POM中转换一个依赖就算准备好了:

<dependency>  
   <groupId>ch.qos.logback</groupId>  
   <artifactId>logback-classic</artifactId>  
   <version>1.0.0</version>  
</dependency>  
由于传递性依赖,日志facace,slf4j,也已经添加到你的project中了。

用slf4j做个“Hello World”例子,就象这样:

 package demo;  
 import org.slf4j.Logger;  
 import org.slf4j.LoggerFactory;  
 public class HelloWorld {  
   public static void main(String[] args) {  
    Logger log = LoggerFactory.getLogger(HelloWorld.class);  
    log.info("Hello World");  
   }  
 }  
所有其余需要做的就是写一个用来控制日志输出的配置文件。
fbm
fbm
翻译于 2013/02/19 17:55
1

配置文件在log4j里通常叫做log4j.xml,在logback里是logback.xml,或者,在测试环境里叫做logback-test.xml。

在Maven project里,logback.xml文件必须放在$PROJECT_HOME/src/main/resources目录中。logback-test.xml文件必须放在$PROJECT_HOME/src/test/resources目录中。简单的配置文件可以象这样来写:

 <configuration>  
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">  
   <!-- encoders are assigned the type  
      ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->  
   <encoder>  
    <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>  
   </encoder>  
  </appender>  
  <root level="debug">  
   <appender-ref ref="STDOUT" />  
  </root>  
 </configuration>  
logback完整的手册 非常详尽,可到这里来阅读
fbm
fbm
翻译于 2013/02/19 18:10
1
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
加载中

评论(23)

成诺
排除掉所有的日志的依赖,添加依赖spring-boot-starter-logging,完成logback配置
JoeyBlue
JoeyBlue

引用来自“freish”的评论

看了半天,这篇文章等于什么也没说。。。

scott_tang
scott_tang

引用来自“相见欢”的评论

引用来自“momotang”的评论

10年就开始用logback了, 记得当时是为了解决项目的log4j与JBOSS本身自带的log4j的冲突问题, 到现在为止,一直再用logback..支持logback

大哥你真是个骨灰级用户啊,能再介绍下你实际使用logback的一点经验么,是不是一定得从log4j迁移过去?性能上真有那么大提高?

"骨灰级"谈不上, 怎么迁移,我记得logback手册上也有说怎么迁移的, 性能上,我还真没感觉出来,
南湖船老大
南湖船老大

引用来自“freish”的评论

看了半天,这篇文章等于什么也没说。。。

额,因为用maven管理依赖太方便了,只要改下配置即可~
韭精过敏
韭精过敏

引用来自“monolithic”的评论

引用来自“name=天天”的评论

引用来自“monolithic”的评论

遗留代码用log4j的怎么办,其他第三方jar用log4j的怎么办

代码统一使用slf4j 做api层, 实现可以选用log4j或 logback

这个我知道,但是好像用slf4j做api层,同时用log4j和logback并存有问题

旧项目就别费心了,项目够用就行了呗
徐林
徐林
早听说过性能和易用性不错,一直没有试过。
上古进程
上古进程

引用来自“monolithic”的评论

引用来自“name=天天”的评论

引用来自“monolithic”的评论

遗留代码用log4j的怎么办,其他第三方jar用log4j的怎么办

代码统一使用slf4j 做api层, 实现可以选用log4j或 logback

这个我知道,但是好像用slf4j做api层,同时用log4j和logback并存有问题

遗留代码、第三方使用的log4j,直接删除log4j的jar,加入slf4j-api、logback-core和logback-classic,假如有使用到commons-logging的,删掉commons-logging.jar,加入jcl-over-slf4j。
宇宙大将军

引用来自“starstroll”的评论

其实我不明白,为什么日志不能写到数据库里吗?专门开一个库用来写日志……

写数据库比写文件效率低,而且做日志分析的时候文本型的日志比数据库中的日志比较好处理,用grep、awk、shell脚本和python等工具分析日志灵活度很高。
wendal
wendal
不是说logback更慢吗?
地瓜干
地瓜干
logback有个问题,配置按大小的话做多只能生成13个日志,再多的话就没有了
返回顶部
顶部