目前流行的日志门面接口有common-logging、slf4j,以前一直都在使用前者,后来许多文章都在介绍slf4j,很多地方都在介绍slf4j的优点(最主要的比common-logging优越的地方是能在OSGi环境下使用,但是至于为什么common-logging不能使用还是不太清楚),因此决定开始尝试slf4j,对于jar包引入方面,感觉稍微没有common-logging方便,common-logging会自动从众多日志实现的jar包中自动选择,而slf4j需要放入“合适”的jar包才能使用,当然这根它的实现机制有关系,slf4j的实现机制要求她必须这么做。
对于日志门面接口的介绍网上有很多文章介绍,不多说废话了,直接记录点实惠的东西,供查用。
slf4j这是门面接口,没有实现,如同common-logging一样,需要搭配具体的实现才能使用;
貌似logback是slf4j的亲密搭配,从引入jar包的名称也能看出来;
下面介绍两种搭配方式:
1. slf4j+logback
引入包:slf4j-api.jar、logback-classic、logback-core.jar (注意这三个版本必须一致)
logback最简单的配置示例(不是必须的)logback.xml:
<configuration debug="true"> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <!-- encoders are assigned by default the type ch.qos.logback.classic.encoder.PatternLayoutEncoder --> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n </pattern> </encoder> </appender> <root level="debug"> <appender-ref ref="STDOUT" /> </root> <!-- 下面配置一些具体包的日志过滤级别 --> <logger name="org.apache.activemq" level="WARN"/> </configuration>
2.slf4j+log4j
引入包:slf4j-api.jar、slf4j-log4j.jar、log4j.jar(注意三个版本必须一致)
log4j配置示例,log4j.properties:
#设置级别和目的地 log4j.rootLogger=debug,appender1 #输出到控制台 log4j.appender.appender1=org.apache.log4j.ConsoleAppender #设置输出样式 log4j.appender.appender1.layout=org.apache.log4j.PatternLayout #自定义样式 # %r 时间 0 # %t 方法名 main # %p 优先级 DEBUG/INFO/ERROR # %c 所属类的全名(包括包名) # %l 发生的位置,在某个类的某行 # %m 输出代码中指定的讯息,如log(message)中的message # %n 输出一个换行符号 log4j.appender.appender1.layout.ConversionPattern=[%d{yy/MM/dd HH:mm:ss:SSS}][%C-%M] %m%n #输出到文件(这里默认为追加方式) log4j.appender.appender2=org.apache.log4j.FileAppender #设置文件输出路径 #【1】文本文件 log4j.appender.appender2.File=c:/log1.log #设置文件输出样式 log4j.appender.appender2.layout=org.apache.log4j.PatternLayout log4j.appender.appender2.layout.ConversionPattern=[%d{HH:mm:ss:SSS}][%C-%M] -%m%n
无论哪种搭配方式,程序中使用的方法如下:
程序中先定义logger
private static Logger logger = LoggerFactory.getLogger(YourClass.class);//slf4j logging
程序中日志输出方法:
logger.debug("hello");
logger.info("hello{}",p);//p是变量