其他文章
SLF4J是什么
SLF4J(Simple Logging Facade for Java) 是一个日志框架,底层整合了众多日志框架(java.util.logging, logback, log4j等),可以方便的切换底层的日志框架,而不用修改代码。
Log4j推出了2.x新版本,API接口不兼容1.x版本,如果是1.x的版本的话,整合起来更方便,直接添加依赖slf4j-log4j12
SLF4J整合Log4j 2的步骤
- pom.xml中添加SLF4J和Log4j 2的相关依赖
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.11.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-slf4j-impl -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.11.1</version>
</dependency>
- 配置Log4j 2
resources目录下创建log4j2.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<configuration status="info">
<!-- 自定义属性,以供后面的配置项引用 -->
<Properties>
<Property name="fileName">hello.log</Property>
<Property name="backupFilePath">/tmp/logs/</Property>
<Property name="logFormat">%d{yyyy-MM-dd HH:mm:ss.SSS} %t [%-5p] %c (%F:%L) %msg%n</Property>
</Properties>
<!-- 定义appenders -->
<appenders>
<!-- 输出到控制台 -->
<Console name="ConsoleTest" target="SYSTEM_OUT">
<ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="${logFormat}"/>
</Console>
<!-- 日志存档,按照指定的文件名格式切割日志文件 -->
<RollingFile name="RollingFileTest" fileName="${backupFilePath}${fileName}"
filePattern="${backupFilePath}${date:yyyyMM}/app-%d{yyyyMMddHHmmssSSS}.log.gz">
<PatternLayout pattern="${logFormat}"/>
<!-- 日志文件达到1KB,即切割日志文件 -->
<SizeBasedTriggeringPolicy size="1KB"/>
<DefaultRolloverStrategy max="20"/>
</RollingFile>
</appenders>
<!-- 定义logger -->
<loggers>
<Root level="info">
<!-- 关联上面定义的appenders -->
<AppenderRef ref="ConsoleTest"/>
<AppenderRef ref="RollingFileTest"/>
</Root>
</loggers>
</configuration>
- 代码调用
package com.example.slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HelloWorld {
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger(HelloWorld.class);
logger.info("Hello World");
logger.debug("Debug Hello World");
logger.error("Error Hello World");
logger.warn("Warn Hello World");
}
}
- 运行结果
多运行几次,以便让日志文件超过指定的1KB大小,从而切割日志
.
├── 201812
│ ├── app-20181210165049975.log.gz
│ └── app-20181210165122691.log.gz
└── hello.log