引入依赖
在pom.xml配置文件中添加依赖:
<!--slf4j+log4j2-->
<!--slf4j和log4j2整合时需要使用桥接包-->
<!--桥接包中引入了slf4j-api、log4j-core、log4j-api三个依赖-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.14.0</version>
</dependency>
<!--<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.30</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.14.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.14.1</version>
</dependency>-->
因为log4j-slf4j-impl桥接包中中引入了slf4j-api、log4j-core和log4j-api,因此在pom.xml文件中可以只引入log4j-slf4j-impl桥接包。也可以在pom.xml文件中引入slf4j-api、log4j-core和log4j-api三个依赖,便于控制依赖的版本。
注意:log4j-core引入了log4j-api,因此可以只引入log4j-core。
创建log4j2.xml配置文件
spring会自动加载配置文件的规则:
- Log4j将搜索WEB-INF目录中“log4j2”开头的文件。如果找到多个文件,并且存在以“log4j2-name”开头的文件,其中name是Web应用程序的名称,则会使用它。否则,将使用第一个文件。
- 在resources目录下搜索配置文件,规则同上。
log4j2.xml文件示例
<?xml version="1.0" encoding="UTF-8"?>
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出-->
<!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数-->
<!--https://blog.csdn.net/qq_16498553/article/details/107778358-->
<Configuration status="info" monitorInterval="30">
<!--全局属性-->
<Properties>
<Property name="APP_NAME">rczp-ssm</Property>
<!--设置日志文件存储路径为F:/workspace/log4j/${APP_NAME}-->
<Property name="LOG_FILE_PATH">F:/workspace/log4j/${APP_NAME}</Property>
<!--<Property name="LOG_FILE_PATH">./logs/${APP_NAME}</Property>-->
<!--设置日志输出格式-->
<Property name="PATTERN_FORMAT">%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n</Property>
</Properties>
<!--配置输出源-->
<Appenders>
<!--输出到控制台-->
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="${PATTERN_FORMAT}" />
</Console>
<!--输出info日志到文件,filePattern旧日志另存文件名-->
<RollingFile name="RollingInfoFile" fileName="${LOG_FILE_PATH}/info.log"
filePattern="${LOG_FILE_PATH}/$${date:yyyyMM}/info-%d{yyyyMMdd}-%i.log.gz">
<!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
<Filters>
<ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL"/>
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
<PatternLayout>
<pattern>${PATTERN_FORMAT}</pattern>
</PatternLayout>
<Policies>
<!-- rollover on startup, daily and when the file reaches 10 MegaBytes -->
<!--当系统重启/日期更新/超过100M将会覆盖文件-->
<OnStartupTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="100 MB"/>
<TimeBasedTriggeringPolicy/>
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="applicationLog" />
<AppenderRef ref="Console" />
<AppenderRef ref="RollingInfoFile" />
</Root>
</Loggers>
</Configuration>
使用slf4j打印日志
private static final Logger log = LoggerFactory.getLogger(Test.class);
常用的是log.info()
log.info("log4j2-Info");
log.warn("log4j2-Warn");
log.error("log4j2-Error");
如果log4j2.xml配置文件在resources目录下,或者在WEB-INF目录下,那么SSM整合log4j2日志成功:
自定义log4j2.xml文件位置
引入依赖
使用maven工程创建的项目,在pom.xml配置文件中添加依赖:
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.14.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-web</artifactId>
<version>2.14.0</version>
</dependency>
注意:在log4j-web依赖中,已经依赖了log4j-core和log4j-api两个依赖,因此在pom.xml文件中引入这两个依赖即可,如果对依赖有版本要求,可以在pom.xml中引入并指定版本。请注意有没有版本冲突的问题。
创建log4j2.xml配置文件
在resources/config目录下创建log4j2.xml配置文件,文件内容与上文中的一致即可。
指定log4j2.xml文件的位置
使用log4jConfiguration参数在web.xml中指定log4j2.xml配置文件的路径。
<!-- log4j2-->
<context-param>
<param-name>log4jConfiguration</param-name>
<param-value>classpath:config/log4j2.xml</param-value>
</context-param>
日志输出正常:
如果log4j2.xml配置文件没有放在resources目录下,也没有放在WEB-INF目录下,也没有在web.xml中设置log4jConfiguration参数指定log4j2.xml文件路径。虽然项目可以正常启动,但是不会打印日志。是因为log4j2.xml配置文件没有被加载。