官网:https://logging.apache.org/log4j/2.x/
历史:Ceki Gülcü 1996年创立Log4j,1999年捐献给Apache,2015年Apache宣布Log4j不在维护,开启Log4j 2
同类产品:JDK Logger、Apache Commons Logging
日记级别
fatal > error > warn > info > debug > trace
Log4j应用组成
1、配置maven依赖
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.11.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.11.1</version>
</dependency>
整合SpringBoot
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<!-- 使用Log4j,排除掉springboot 自带的logging -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
2、log4j配置
在resource目录下,新建 log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN"> <!-- log4j自身日志的级别,输出到console -->
<Appenders> <!-- 输出目标配置-->
<Console name="Console" target="SYSTEM_OUT"> <!-- 控制台 -->
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" /> <!-- 输出格式 -->
</Console>
<File name="LogFile" fileName="D:/logs/tim.log"> <!-- 日志文件 -->
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
</File>
<!-- 滚动文件 -->
<RollingRandomAccessFile name="RollingFile" fileName="D:/log4j2.log"
filePattern="D:/$${date:yyyy-MM}/log4j2-%d{yyyy-MM-dd HH-mm}-%i.log"> <!-- 文件名格式 -->
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
<Policies>
<TimeBasedTriggeringPolicy interval="1" /> <!-- 每天生成一个文件 -->
<SizeBasedTriggeringPolicy size="1024 MB" /> <!-- 每1024MB成一个文件 -->
</Policies>
<DefaultRolloverStrategy max="20" /> <!-- 最多保留20个文件 -->
</RollingRandomAccessFile>
</Appenders>
<Loggers> <!-- 输出来源配置 -->
<Root level="error"> <!-- 所有来源 -->
<AppenderRef ref="Console" /> <!-- 输出来源绑定输出目标 -->
</Root>
<!-- 指定来源,additivity为false表示Root中扣除此来源 -->
<Logger level="trace" name="com.hogen.controller.MyController" additivity="false">
<AppenderRef ref="LogFile" />
</Logger>
<Logger level="trace" name="com.hogen.service.MyService" additivity="false">
<AppenderRef ref="RollingFile" />
</Logger>
</Loggers>
</Configuration>
3、使用
private static Logger logger = LogManager.getLogger(MyController.class.getName()); // 入参即日志的前缀
logger.error("error级别");
logger.info("info级别");
logger.debug("debug级别");
logger.warn("warn级别");
logger.fatal("fatal级别");
logger.log(Level.TRACE, "trace级别"); // 等同于logger.trace("trace级别")
按日志级别输出文件
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<properties>
<property name="LOG_HOME">${sys:user.home}/logs</property> <!-- 自定义量,可以引用系统变量 -->
<property name="FILE_NAME">log4j</property>
</properties>
<Appenders>
<RollingRandomAccessFile name="InfoFile" fileName="${LOG_HOME}/info.log"
filePattern="${LOG_HOME}/$${date:yyyy-MM}/info-%d{yyyy-MM-dd HH-mm}-%i.log">
<Filters>
<!-- 级别在warn以上的,排除掉;级别在warn以下的,进入下一个filter -->
<ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL"/>
<!-- 级别在info以上的,输出;级别在info以下的,排除掉;最终只得到info级别 -->
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
<PatternLayout>同上</PatternLayout>
<Policies>同上<Policies>
<DefaultRolloverStrategy>同上<DefaultRolloverStrategy/>
</RollingRandomAccessFile>
<RollingRandomAccessFile name="ErrorFile" fileName="${LOG_HOME}/error.log"
filePattern="${LOG_HOME}/$${date:yyyy-MM}/error-%d{yyyy-MM-dd HH-mm}-%i.log">
<Filters>
<ThresholdFilter level="fatal" onMatch="DENY" onMismatch="NEUTRAL" />
<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY" />
</Filters>k
<PatternLayout>同上</PatternLayout>
<Policies>同上<Policies>
<DefaultRolloverStrategy>同上<DefaultRolloverStrategy/>
</RollingRandomAccessFile>
<RollingRandomAccessFile name="FatalFile" fileName="${LOG_HOME}/fatal.log"
filePattern="${LOG_HOME}/$${date:yyyy-MM}/fatal-%d{yyyy-MM-dd HH-mm}-%i.log">
<Filters>
<ThresholdFilter level="fatal" onMatch="ACCEPT" onMismatch="DENY" />
</Filters>
<PatternLayout>同上</PatternLayout>
<Policies>同上<Policies>
<DefaultRolloverStrategy>同上<DefaultRolloverStrategy/>
</RollingRandomAccessFile>
</Appenders>
<Loggers>
<Root level="trace">
<AppenderRef ref="Console" />
<AppenderRef ref="InfoFile" />
<AppenderRef ref="ErrorFile" />
<AppenderRef ref="FatalFile" />
</Root>
</Loggers>
</Configuration>