关于log4j与logslf4j之间的关系,暂不提。
说说最近遇到的一件事:拿到一份源代码但里面没有任何依赖包提供(源代码本身是需要依赖包的,如log4j; 只是在发布时,没有带出)。好吧,反正JAVA里的JAR到处都可以找到(问题是jar包之间的某些混杂的关系让你不知所措)。
拿到源代码---》引入工程-----》报错(Jar包不存在)-----》下载所需要的jar包-----》引入编译路径----》没出报错了----》运行实例。
到这里,本来一切都很顺利,可是问题就来了:源代码中的log日志死活打不出。
查看jar:(项目中已经引入了log4j-xxx.jar;slf4j-api-xxx.jar,slf4j-log4j12-xxx.jar)
为什么就是打不出日志呢?
结果发现在项目中引用的log类有问题。
解决:
要么只引用log4j-xxx.jar;
要么只引用slf4j-api-xxx.jar,slf4j-log4j12-xxx.jar;
测试实例如下:
1:用log4j-xxx.jar
package j8583.check;
import org.apache.log4j.Logger;
/**
* 引用的日志类不一样,这是org.apache.log4j.Logger;----log4j-xxxx.jar
*
* @author Administrator
*
*/
public class CheckLog4j {
private static Logger log = Logger.getLogger(CheckLogSLF4j.class);
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
log.debug("------- org.apache.log4j.Logger----------");
}
}
2:用slf4j-api-xxx.jar,slf4j-log4j12-xxx.jar;
package j8583.check;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class CheckLogSLF4j {
private static Logger log = LoggerFactory.getLogger(CheckLogSLF4j.class);
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
log.debug("-----------org.slf4j.Logger;--------------");
}
}
相关的属性配置文件:log4j.properties
log4j.rootLogger = debug, stdout, appender1
###################
# stdout Appender
###################
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p [%l] %m%n
###################
# appender1 appender1
###################
log4j.appender.appender1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.appender1.File=c:/demolog4j.log
log4j.appender.appender1.layout=org.apache.log4j.PatternLayout
log4j.appender.appender1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p [%l] %m%n
结果,上面二个程序中打出结果日志。