1、pom 依赖
<dependencies>
<dependency>
<artifactId>log4j-slf4j-impl</artifactId>
<groupId>org.apache.logging.log4j</groupId>
<version>2.19.0</version>
</dependency>
</dependencies>
log4j-slf4j-impl 已经依赖了 log4j-api, log4j-core 两个依赖
这里为了使用 slf4j做日志门面,所以直接用了 log4j-slf4j-impl,其它做法可以直接引入 log4j-api 和 log4j-core 包也是一样的效果
比如,如果不想用 slf4j,那依赖是这样子的
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.19.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.19.0</version>
</dependency>
但使用 slf4j 和直接使用 log4j, 在使用上有区别的:
-
使用 slf4j:
Logger log = LoggerFactory.getLogger(Tank.class);
(推荐使用 slft4j, 它是日志的门面,底层实现可以使用 log4j,也可以使用 logback,特别对于写公共模块更为重要)
-
使用 log4j2
Logger log = LogManager.getLogger(Tank.class);
log4j2.xml 模板
(只引入依赖,没有配置 log4j2.xml 模板是不行的~ 然后,把这个 log4j2.xml 文件放到 resources 下面即可。 文件名也要用 log4j2.xml, 如果用了log4j.xml 貌似是不行的,当然,如果模板用错了,也会报错~)
<?xml version="1.0" encoding="UTF-8"?>
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出 -->
<!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数 -->
<configuration status="WARN" monitorInterval="10">
<Properties>
<Property name="LOG_HOME">./logs</Property>
<Property name="MODLUE_NAME">algo-module</Property>
<Property name="INFO_FILE_NAME">${MODLUE_NAME}_info.log</Property>
<Property name="INFO_ARCHIVE_NAME">${MODLUE_NAME}_info_%d{yyyyMMdd}.log
</Property>
<Property name="ERROR_FILE_NAME">${MODLUE_NAME}_error.log</Property>
<Property name="ERROR_ARCHIVE_NAME">${MODLUE_NAME}_error_%d{yyyyMMdd}.log
</Property>
<property name="BUFFER_SIZE">524288</property>
<property name="ROLLING_INTERVAL">1</property>
</Properties>
<!--先定义所有的appender -->
<appenders>
<!--这个输出控制台的配置 -->
<console name="Console" target="SYSTEM_OUT">
<!--输出日志的格式 -->
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss}|%c|%msg%n"/>
<Filters>
<ThresholdFilter level="debug" onMatch="ACCEPT"
onMismatch="DENY"/>
</Filters>
</console>
<RollingRandomAccessFile name="RollingFileInfo"
fileName="${LOG_HOME}/${INFO_FILE_NAME}"
filePattern="${LOG_HOME}/${INFO_ARCHIVE_NAME}"
immediateFlush="true" bufferSize="${BUFFER_SIZE}" append="true">
<PatternLayout>
<pattern>${sys:log_prefix:-}%d{yyyyMMddHHmmss}|${LOG_CODE}|%-level|%c|%msg%n
</pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="${ROLLING_INTERVAL}"
modulate="true"/>
</Policies>
<!-- 只记录info和warn级别信息 -->
<Filters>
<!-- DENY 不容许error级别以上写入该文件 NEUTRAL 中立, 上下两个条件组合,取中间值 -->
<!-- <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL" /> -->
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
</RollingRandomAccessFile>
<!--immediateFlush 是否立即写入, bufferSize 缓存大小 -->
<RollingRandomAccessFile name="RollingFileError"
fileName="${LOG_HOME}/${ERROR_FILE_NAME}"
filePattern="${LOG_HOME}/${ERROR_ARCHIVE_NAME}"
immediateFlush="true" bufferSize="${BUFFER_SIZE}" append="true">
<PatternLayout>
<pattern>${sys:log_prefix:-}%d{yyyyMMddHHmmss}|${LOG_CODE}|%-level|%c|%msg%n
</pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="${ROLLING_INTERVAL}"
modulate="true"/>
</Policies>
<!-- 只记录error以上级别信息 -->
<Filters>
<ThresholdFilter level="error" onMatch="ACCEPT"
onMismatch="DENY"/>
</Filters>
</RollingRandomAccessFile>
</appenders>
<!--然后定义logger,只有定义了logger并引入的appender,appender才会生效 -->
<loggers>
<!--过滤掉spring和mybatis的一些无用的DEBUG信息 -->
<logger name="org.mybatis" level="DEBUG"></logger>
<root level="INFO">
<appender-ref ref="Console"/>
<appender-ref ref="RollingFileInfo"/>
<appender-ref ref="RollingFileError"/>
</root>
</loggers>
</configuration>
标签:xml,log,slf4j,使用,log4j2,log4j
From: https://www.cnblogs.com/aaacarrot/p/16948196.html