日志框架这么多,他们之间到底是什么关系呢?笼统的讲就是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依赖
<properties> <slf4j.version>1.7.25</slf4j.version> <log4j.version>2.8.2</log4j.version> </properties> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> <version>${log4j.version}</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-web</artifactId> <version>${log4j.version}</version> <scope>runtime</scope> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>${log4j.version}</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>${log4j.version}</version> </dependency>
Step 2:添加配置文件
配置文件可以直接在resources文件夹下创建,文件名为log4j2.xml,该文件夹是IDEA专门用来存放各种配置文件的地方,这样就不需要指定配置文件的位置。如果想放在其他文件夹下,则需要在web.xml文件中添加如下配置:
<context-param> <param-name>log4jConfiguration</param-name> <!-- 日志配置文件路径,请根据具体项目自行调整 --> <param-value>classpath:conf/log4j2.xml</param-value> </context-param>
我的配置文件log4j2.xml内容如下(此处并没有将日志信息输出到外部文件):
<?xml version="1.0" encoding="utf-8"?> <!--日志级别:TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出--> <!-- status : 这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,会看到log4j2内部各种详细输出 monitorInterval : Log4j能够自动检测修改配置文件和重新配置本身, 设置间隔秒数。此处表示每隔300秒重读一次配置文件 --> <Configuration status="ERROR" monitorInterval="300"> <!--<properties>--> <!--<property name="LOG_HOME">F:\logs</property>--> <!--<property name="ERROR_LOG_FILE_NAME">error</property>--> <!--</properties>--> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <!-- 定义类型为Console的Appender --> <PatternLayout pattern="%d{HH:mm:ss} [%-5level] [%-10thread] %c{1} - %msg%n"/> <!-- 定义类型为Pattern的Layout --> </Console> </Appenders> <!--定义logger,只有定义了logger并引入上面的appender,appender才会生效--> <Loggers> <Root level="error"> <!-- 定义Root Logger --> <AppenderRef ref="Console"/> <!-- Root Logger的Appender引用上面定义的Console --> </Root> <!--定义名字为MainLogger的Logger,其日志级别为info,info以下级别的信息将不会输出 --> <Logger name="MainLogger" level="info" additivity="false"> <AppenderRef ref="Console"/> <!-- Root Logger的Appender引用上面定义的Console --> </Logger> </Loggers> </Configuration>
Step 3: 在Java文件中使用slf4j打印日志信息:
此处注意Logger的名称必须与配置文件中对应
@Controller public class MainController { // 获取log4j2.xml文件中定义的名为“MainLogger”的Logger // 如果没有对应名称的Logger,则无法使用Logger记录和输出日志信息 private static final Logger log = LoggerFactory.getLogger("MainLogger"); @RequestMapping(value = "/test") public String test(){ log.info("info..."); log.debug("debug..."); log.warn("warn..."); log.error("error..."); return "test"; } }
时间: 2024-11-05 16:35:46