slf4j 与log4j 日志管理
2015-11-03 13:03
316 查看
log4j简易入门
假设使用log4j做为底层日志工具,运行以上程序需要三个包:log4j-1.2.xx.jar、slf4j-api-x.x.x.jar、以及slf4j-log4j12-x.x.x.jar,后两个包由slf4j提供,包名中的x表示版本号。
java代码:
private static final Logger logger = LoggerFactory.getLogger(Test.class);
输出日志信息:
logger.debug(“debug”);
大家应该还记得,在log4j中,为了提高运行效率,往往在输出信息之前,还要进行级别判断,以避免无效的字符串连接操作。如下:
if (logger.isDebugEnabled()){
logger.debug(“debug:“+name);
}
slf4j巧妙的解决了这个问题:先传入带有占位符的字符串,同时把其他参数传入,在slf4j的内容部实现中,如果级别合适再去用传入的参数去替换字符串中的占位符,否则不用执行。
logger.info("{} is {}", new String[]{“x",“y"});
package test.log4j; import org.apache.log4j.Logger; publicclass HelloLog4j { privatestaticfinal Logger logger = Logger.getLogger(HelloLog4j.class); publicstaticvoid main(String[] args) { logger.debug("This is debug message"); logger.info("This is info message"); logger.warn("This is warn message"); logger.error("This is error message"); } }
log4j简单配置log4j.properties
#可以设置级别:debug < info < warn < error #debug: 显示debug, info, warn, error #info: 显示info, warn, error #warn: 显示warn, error #error: 只显示error #日志的输出级别由rootLogger和普通Logger设置的最高级别决定。 #log4j.rootLogger=debug,appender1 #log4j.rootLogger=info,appender1 log4j.rootLogger=warn,appender1 #log4j.rootLogger=error,appender1 #输出到控制台 log4j.appender.appender1=org.apache.log4j.ConsoleAppender #样式为TTCCLayout log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout #这里配置的是类所在的包test.log4j, 逗号之前未配置日志输出级别,默认为根logger的级别 log4j.logger.test.log4j=, TEST log4j.appender.TEST=org.apache.log4j.ConsoleAppender log4j.appender.TEST.layout=org.apache.log4j.TTCCLayout
log4j提供的Appender
org.apache.log4j.ConsoleAppender(控制台), org.apache.log4j.FileAppender(文件), org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件), org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件), org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
log4j提供的Layout
org.apache.log4j.HTMLLayout(以HTML表格形式布局), org.apache.log4j.PatternLayout(可以灵活地指定布局模式), org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串), org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下:
%m 输出代码中指定的消息 %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL %r 输出自应用启动到输出该log信息耗费的毫秒数 %c 输出所属的类目,通常就是所在类的全名 %t 输出产生该日志事件的线程名 %n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n” %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921 %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)
slf4j简介
package test.slf4j; import org.slf4j.Logger; import org.slf4j.LoggerFactory; publicclass HelloSlf4j { privatestaticfinal Logger logger = LoggerFactory.getLogger(HelloSlf4j.class); publicstaticvoid main(String[] args) { logger.debug("This is debug message"); logger.info("This is info message"); logger.warn("This is warn message"); logger.error("This is error message"); } }
假设使用log4j做为底层日志工具,运行以上程序需要三个包:log4j-1.2.xx.jar、slf4j-api-x.x.x.jar、以及slf4j-log4j12-x.x.x.jar,后两个包由slf4j提供,包名中的x表示版本号。
获得logger对象:
java代码:private static final Logger logger = LoggerFactory.getLogger(Test.class);
输出日志信息:
logger.debug(“debug”);
slf4j中的占位符—不再需要冗长的级别判断
大家应该还记得,在log4j中,为了提高运行效率,往往在输出信息之前,还要进行级别判断,以避免无效的字符串连接操作。如下:if (logger.isDebugEnabled()){
logger.debug(“debug:“+name);
}
slf4j巧妙的解决了这个问题:先传入带有占位符的字符串,同时把其他参数传入,在slf4j的内容部实现中,如果级别合适再去用传入的参数去替换字符串中的占位符,否则不用执行。
logger.info("{} is {}", new String[]{“x",“y"});
相关文章推荐
- Apache Log4j 2.0-rc1 发布
- log4j详细的常用配置说明介绍
- log4j的使用详细解析
- Log4J输出至当前web路径
- Spring3 AOP配置异常。执行时间记录
- log4j.properties配置与加载应用
- jfinal-slf4j 让jfinal使用slf4j的log api
- 一个配置比较全的log4j.xml文件(一)
- SpringAOP实现自动生成日志
- Log4j的ConversionPattern参数的格式含义
- 使用高效的日志工具—Log4J
- Log4j 错误: java.lang.NoSuchFieldError: TRACE
- log4j日志配置
- Tomcat日志配置,可结合log4j
- log4j的使用方法
- Log4j使用总结
- slf4j
- SLF4J(2)
- Java日志系统研究--转
- 对不同的package定义不同的输出级别(commons-logging+log4j)