日志框架这么多,他们之间到底是什么关系呢?笼统的讲就是slf4j是一系列的日志接口,而log4j2、logback是具体实现了接口功能的日志框架。现在的主流日志接口都使用slf4j,而日志的实现就见仁见智了,至于他们的关系请自行百度,此处选择log4j2作为实现框架。网上看到的教程要么对代码没有解释,对新手不友好;要么时间比较久远,跟不上时代。这里使用新版本并结合大量注释,力求简洁明了,有什么问题欢迎留言交流。
运行环境:
log4j2 2.8.1 + slf4j 1.7.25
IntelliJ IDEA 2017.2.5
maven 3.0.5
配置过程
Step 1:导入maven依赖
1.7.25
2.8.2
org.slf4j
slf4j-api
${slf4j.version}
org.apache.logging.log4j
log4j-slf4j-impl
${log4j.version}
org.apache.logging.log4j
log4j-web
${log4j.version}
runtime
org.apache.logging.log4j
log4j-api
${log4j.version}
org.apache.logging.log4j
log4j-core
${log4j.version}
Step 2:添加配置文件
配置文件可以直接在resources文件夹下创建,文件名为log4j2.xml,该文件夹是IDEA专门用来存放各种配置文件的地方,这样就不需要指定配置文件的位置。如果想放在其他文件夹下,则需要在web.xml文件中添加如下配置:
log4jConfiguration
classpath:conf/log4j2.xml
我的配置文件log4j2.xml内容如下(此处并没有将日志信息输出到外部文件):
Step 3: 在Java文件中使用slf4j打印日志信息:
此处注意Logger的名称必须与配置文件中对应
@Controllerpublic classMainController {//获取log4j2.xml文件中定义的名为“MainLogger”的Logger//如果没有对应名称的Logger,则无法使用Logger记录和输出日志信息
private static final Logger log = LoggerFactory.getLogger("MainLogger");
@RequestMapping(value= "/test")publicString test(){
log.info("info...");
log.debug("debug...");
log.warn("warn...");
log.error("error...");return "test";
}
}