返回信息流Top 10 tips on logging in Java - Tutorial
Read more: http://javarevisited.blogspot.com/2011/05/top-10-tips-on-logging-in-java.html#ixzz3MmULL9eY
最近被项目搞烦了,翻暖神的Java学习路线帖,感觉是时候使用Logging了。上面一篇tutorial觉得写得不错,分享一下。
这是一条镜像帖。来源:北邮人论坛 / java / #37314同步于 2014/12/24
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
【分享】Top 10 tips on logging in Java - Tutorial
lixing
2014/12/24镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
请用slf4j做前段,用logback做后端。不要像该文中说的那样用log4j或者java.util.logging。
slf4j和logback都是log4j的原作者开发的。
【 在 nuanyangyang 的大作中提到: 】
: 请用slf4j做前段,用logback做后端。不要像该文中说的那样用log4j或者java.util.logging。
: slf4j和logback都是log4j的原作者开发的。
我今天尝试了用slf4j和自带的SimpleLogger搭配,发现功能上好像没办法实现我需要的功能。
另外我想问一个问题,对于普通的small application,怎么实现log既输出到console又写入日志文件里呢?是不是通过logback的配置文件就可以实现?
【 在 lixing 的大作中提到: 】
: 我今天尝试了用slf4j和自带的SimpleLogger搭配,发现功能上好像没办法实现我需要的功能。
: 另外我想问一个问题,对于普通的small application,怎么实现log既输出到console又写入日志文件里呢?是不是通过logback的配置文件就可以实现?
复杂的功能靠日志的后端实现。也就是logback。
slf4j的设计思路是将日志分为接口和实现两部分。应用程序只依赖接口(或称前端,也就是slf4j),而具体记录日志的是实现(或称后端,比如simplelogger和logback)。
前端只负责提供logger,允许应用程序调用其debug, info, warning, error等方法以“发射”日志信息,完全不管这些日志如何记录,记录到哪里。
后端负责真正处理每一条日志信息,信息包括logger、等级和消息内容。比如:“com.xxx.yyy.zzz.FooBar发出的warning信息应该记录到哪里”,可以是写到文件里(以及以什么格式写到文件里),还是从终端打印出来,还是发送到数据库、网络主机,或者发送给系统的syslog服务器。
logback是非常强大的后端。
log4j没有区分前后端。java.util.logging(JUL)也没有区分前后端。Jakarta Commons Logging(JCL)和slf4j一样,只有前端,但思路和slf4j不一样。
通过slf4j提供的一些桥(log4j-over-slf4j,jul-over-slf4j,可以让log4j, JUL,JCL作为前端,转接到slf4j上。这样,现有的应用程序,如果原本是为log4j写的,现在可以自动开始用slf4j。
通过另一些桥(包括slf4j-log4j,slf4j-jul)可以让log4j、jul作为slf4j的后端。这样,如果你不想用logback,或者你的项目已经用了log4j或者jul,但你想让别的用slf4j写的组件输出到log4j或者jul里,就可以自动完成。
当然,不可以同时拥有log4j-over-slf4j和slf4j-log4j。jul也类似。
【 在 nuanyangyang 的大作中提到: 】
:
: 复杂的功能靠日志的后端实现。也就是logback。
: slf4j的设计思路是将日志分为接口和实现两部分。应用程序只依赖接口(或称前端,也就是slf4j),而具体记录日志的是实现(或称后端,比如simplelogger和logback)。
: ...................
有点豁然开朗的感觉,还需要多学习,谢谢暖神解答。
【 在 nuanyangyang 的大作中提到: 】
:
: 复杂的功能靠日志的后端实现。也就是logback。
: slf4j的设计思路是将日志分为接口和实现两部分。应用程序只依赖接口(或称前端,也就是slf4j),而具体记录日志的是实现(或称后端,比如simplelogger和logback)。
: ...................
暖神,继续请教日志配置文件的问题。我想单独把error信息提取出来写成一个error.log,其余信息放到另一个日志文件info.log中,下面是我的xml配置:
<configuration>
<property file="src/config/variables.properties"/>
<appender name="INFORFILE" class="ch.qos.logback.core.FileAppender">
<file>${inforPath}</file>
<encoder>
<pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
</encoder>
</appender>
<appender name="ERRORFILE" class="ch.qos.logback.core.FileAppender">
<file>${errorPath}</file>
<encoder>
<pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
</encoder>
</appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%msg%n</pattern>
</encoder>
</appender>
<logger name="database" level="ERROR">
<appender-ref ref="ERRORFILE"/>
</logger>
<root level="debug">
<appender-ref ref="INFORFILE"/>
<appender-ref ref="STDOUT"/>
</root>
</configuration>
这样配置的话,info.log中也会输出error信息,影响阅读。。请问怎么配置合适呢?
【 在 lixing 的大作中提到: 】
: 暖神,继续请教日志配置文件的问题。我想单独把error信息提取出来写成一个error.log,其余信息放到另一个日志文件info.log中,下面是我的xml配置:
: [code=xml]
: <configuration>
: ...................
http://stackoverflow.com/questions/5653062/how-can-i-configure-logback-to-log-different-levels-for-a-logger-to-different-de
帮你找到了这个。
【 在 nuanyangyang 的大作中提到: 】
:
: http://stackoverflow.com/questions/5653062/how-can-i-configure-logback-to-log-different-levels-for-a-logger-to-different-de
: 帮你找到了这个。
已经搞定,感谢暖神。