1、使用到的jar包
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.11.0</version>
</dependency>
2、配置文件的设置
将配置文件log4j2.xml放在maven项目的resource路径下。代码如下:
①按时间和大小分割文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="error">
<!-- 先定义所有的appender -->
<appenders>
<!-- 这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面,作为存档,如果不超过size,则此部分日志保存在web.log里面 -->
<RollingFile name="RollingFile" fileName="log4j2/logs/web.log"
filePattern="log4j2/logs/$${date:yyyy-MM}/%d{MM-dd-yyyy}-%i.log">
<!-- pattern = "[ 日志级别 | 类名 | 方法名 | 行数 | 线程名 | 区分客户端 | 时间 ] - 日志信息" -->
<PatternLayout
pattern="[ %level{length=1} | %-20class{1} | %-15M | %-2L | %-2t | %X{5} | %d{yyyy-MM-dd HH:mm:ss} ] %msg%n" />
<Policies>
<TimeBasedTriggeringPolicy interval="2 hour" /> <!--多长时间滚动一次 -->
<SizeBasedTriggeringPolicy size="10KB" /> <!-- 一个日志文件的最大大小 -->
</Policies>
<DefaultRolloverStrategy max="20" /> <!-- 文件夹下最多的文件个数 -->
</RollingFile>
</appenders>
<!-- 然后定义logger,只有定义了logger并引入的appender,appender才会生效 -->
<loggers>
<!-- 建立一个默认的root的logger -->
<root level="trace">
<appender-ref ref="RollingFile" />
</root>
</loggers>
</configuration>
②按时间和大小分割,并分包打印日志
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="error">
<!-- 先定义所有的appender -->
<appenders>
<!-- 这个输出控制台的配置 -->
<Console name="Console" target="SYSTEM_OUT">
<!-- 控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
<ThresholdFilter level="debug" onMatch="ACCEPT"
onMismatch="DENY" />
<!-- 这个都知道是输出日志的格式 -->
<PatternLayout
pattern="[ %-20class{1} ] %msg%n" />
</Console>
<!-- 这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面,作为存档 -->
<RollingFile name="RollingFile-info" fileName="log4j2/info/info.log"
filePattern="log4j2/info/$${date:yyyy-MM}/%d{MM-dd-yyyy}-%i.log">
<!-- pattern = "[ 日志级别 | 类名 | 方法名 | 行数 | 线程名 | 区分客户端 | 时间 ] - 日志信息" -->
<PatternLayout
pattern="[ %level{length=1} | %-20class{1} | %-15M | %-2L | %-2t | %X{5} | %d{yyyy-MM-dd HH:mm:ss} ] %msg%n" />
<Policies>
<TimeBasedTriggeringPolicy interval="2 hour" /> <!--多长时间滚动一次 -->
<SizeBasedTriggeringPolicy size="10KB" /> <!-- 一个日志文件的最大大小 -->
</Policies>
<DefaultRolloverStrategy max="20" /> <!--文件夹下最多的文件个数 -->
</RollingFile>
<RollingFile name="RollingFile-debug" fileName="log4j2/debug/debug.log"
filePattern="log4j2/debug/$${date:yyyy-MM}/%d{MM-dd-yyyy}-%i.log">
<!-- pattern = "[ 日志级别 | 类名 | 方法名 | 行数 | 线程名 | 区分客户端 | 时间 ] - 日志信息" -->
<PatternLayout
pattern="[ %level{length=1} | %-20class{1} | %-15M | %-2L | %-2t | %X{5} | %d{yyyy-MM-dd HH:mm:ss} ] %msg%n" />
<Policies>
<TimeBasedTriggeringPolicy interval="2 hour" /> <!--多长时间滚动一次 -->
<SizeBasedTriggeringPolicy size="10KB" /> <!-- 一个日志文件的最大大小 -->
</Policies>
<DefaultRolloverStrategy max="20" /> <!--文件夹下最多的文件个数 -->
</RollingFile>
<RollingFile name="RollingFile-error" fileName="log4j2/error/error.log"
filePattern="log4j2/error/$${date:yyyy-MM}/%d{MM-dd-yyyy}-%i.log">
<!-- pattern = "[ 日志级别 | 类名 | 方法名 | 行数 | 线程名 | 区分客户端 | 时间 ] - 日志信息" -->
<PatternLayout
pattern="[ %level{length=1} | %-20class{1} | %-15M | %-2L | %-2t | %X{5} | %d{yyyy-MM-dd HH:mm:ss} ] %msg%n" />
<Policies>
<TimeBasedTriggeringPolicy interval="2 hour" /> <!--多长时间滚动一次 -->
<SizeBasedTriggeringPolicy size="10KB" /> <!-- 一个日志文件的最大大小 -->
</Policies>
<DefaultRolloverStrategy max="20" /> <!--文件夹下最多的文件个数 -->
</RollingFile>
</appenders>
<!-- 然后定义logger,只有定义了logger并引入的appender,appender才会生效 -->
<loggers>
<!-- 此处name里面的为对应的包名,包名必须和里面的类的package相同 -->
<logger name="com.test.info" level="debug">
<!-- ref的值是对应使用的appenders的值 -->
<appender-ref ref="RollingFile-info"/>
</logger>
<logger name="com.test.debug" level="debug" >
<appender-ref ref="RollingFile-debug"/>
</logger>
<logger name="com.test.error" level="debug">
<appender-ref ref="RollingFile-error"/>
</logger>
<!-- 建立一个默认的root的logger -->
<root level="trace">
<appender-ref ref="Console" />
</root>
</loggers>
</configuration>
3、在代码中使用
①分别创建包com.test.debug,com.test.info,com.test.error。
②分别在三个包下面创建文件DebugLogging.java,InfoLogging.java,ErrorLogging.java。
代码如下:
package com.test.debug;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class DebugLogging {
private static Logger logger = LogManager.getLogger(DebugLogging.class.getName());
public static void logMessage() {
logger.debug("debug");
}
}
package com.test.error;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class ErrorLogging {
private static Logger logger = LogManager.getLogger(ErrorLogging.class.getName());
public static void logMessage() {
logger.error("error");
}
}
package com.test.info;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class InfoLogging {
private static Logger logger = LogManager.getLogger(InfoLogging.class.getName());
public static void logMessage() {
logger.info("info");
}
}
③在com.test下创建MainTest.java,代码如下:
package com.test;
import com.test.debug.DebugLogging;
import com.test.error.ErrorLogging;
import com.test.info.InfoLogging;
public class MainTest {
public static void main(String[] args) {
DebugLogging.logMessage();
ErrorLogging.logMessage();
InfoLogging.logMessage();
}
}
④运行结果如下:
log4j2/debug/debug.log:
[ D | DebugLogging | logMessage | 11 | main | | 2018-10-25 11:21:38 ] debug
log4j2/error/error.log:
[ E | ErrorLogging | logMessage | 11 | main | | 2018-10-25 11:21:38 ] error
log4j2/info/info.log:
[ I | InfoLogging | logMessage | 11 | main | | 2018-10-25 11:21:38 ] info
参考文档:
1、浅谈Log4j和Log4j2的区别:
https://blog.youkuaiyun.com/weixin_38009266/article/details/78485815
2、Log4j输出格式控制--log4j的PatternLayout参数含义以及详细配置:
https://blog.youkuaiyun.com/reserved_person/article/details/52849505