1. pom依赖:
(1)web自带的log4j包不全,需要排除,并重新引入:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<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. 配置log4j2配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="info">
<Properties>
<property name="log_pattern">%d{yy-MM-dd HH:mm:ss,SSS} %-5p [%X{ip}|%X{user}|%X{globalNum}] %c{2} - %m%n</property>
<property name="basePath">c:\\logs</property>
<property name="common-msg">${basePath}/datalink.log</property>
<property name="rollingfile_common-msg">${basePath}/%d{yyyy-MM}/datalink-%d{yyyy-MM-dd}[%i].log.gz</property>
<property name="error-msg">${basePath}/error.log</property>
<property name="rollingfile_error-msg">${basePath}/%d{yyyy-MM}/error-%d{yyyy-MM-dd}[%i].log.gz</property>
<property name="log.sql.level">info</property>
</Properties>
<!--先定义所有的appender -->
<appenders>
<!--输出控制台的配置 -->
<Console name="Console" target="SYSTEM_OUT">
<!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY" />
<!--输出日志的格式 -->
<PatternLayout pattern="${log_pattern}" />
</Console>
<RollingFile name="rollingfile_common-msg"
filename="${common-msg}" filePattern="${rollingfile_common-msg}" append="true">
<Filters>
<ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
<PatternLayout pattern="${log_pattern}" />
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="250MB"/>
</Policies>
</RollingFile>
<RollingFile name="rollingfile_error-msg"
filename="${error-msg}" filePattern="${rollingfile_error-msg}" append="true">
<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="${log_pattern}" />
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="250MB"/>
</Policies>
</RollingFile>
</appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="Console" />
<AppenderRef ref="rollingfile_error-msg" />
<AppenderRef ref="rollingfile_common-msg" />
</Root>
<Logger name="datalink-log" level="${log.sql.level}" additivity="true">
<AppenderRef ref="Console" />
<AppenderRef ref="rollingfile_error-msg" />
<AppenderRef ref="rollingfile_common-msg" />
</Logger>
</Loggers>
</configuration>
3.封装LoggerUtil
public class LoggerUtil {
public static void setCommonLoggerParam() {
//存入当前服务器ip地址
String ip = "";
try {
InetAddress address = InetAddress.getLocalHost();
ip = address.getHostAddress();
} catch (UnknownHostException e) {
e.printStackTrace();
}
ThreadContext.put("ip", ip);
//存入当前用户账号
ThreadContext.put("user", UserUtil.getName());
//存入当前用户账号
ThreadContext.put("globalNum", UUID.randomUUID().toString());
}
public static Logger getLogger(Class clazz) {
return getLogger(clazz, null);
}
public static Logger getLogger(Class clazz, String globalNum) {
ThreadContext.put("globalNum", globalNum);
return LoggerFactory.getLogger(clazz);
}
}