logback日志配置和自定义日志参数
这篇文章记录了一些日志的配置方式和示例
基础的,可以直接用的logback配置文件
这个配置文件可以直接用,只需要按照自己需要修改日志文件存放位置和日志文件名
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 这里把日志文件放到了/data/logs/test-log-project路径下,也可以用相对路径如 logs 这样就会放到项目路径下的logs文件夹下 -->
<property name="LOG_HOME" value="/data/logs/test-log-project" />
<!-- 控制台日志输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- 日志输出格式,其中traceId是自定义的参数,下面会介绍,如果不需要可以删掉 -->
<!-- %-0.-2048m 输出信息左对齐,不足0个字符则在信息后面用空格补足,超过2048个字符则只保留前2048个字符 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss} traceId:%X{traceId} [%thread] [%level] [%class:%line] - %-0.-2048m %n
</pattern>
</encoder>
</appender>
<appender name="FILE-OUT"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/test-log-project.log</file>
<encoder>
<!-- 日志输出格式,其中traceId是自定义的参数,下面会介绍,如果不需要可以删掉 -->
<!-- %-0.-2048m 输出信息左对齐,不足0个字符则在信息后面用空格补足,超过2048个字符则只保留前2048个字符 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss} traceId:%X{traceId} [%thread] [%level] [%class:%line] - %-0.-2048m %n
</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/test-log-project.%d{yyyy-MM-dd}.%i.log.gz
</fileNamePattern>
<!-- 日志文件最长保存 60 days -->
<maxHistory>60</maxHistory>
<!-- 日志文件超过20GB会被切割 -->
<totalSizeCap>20GB</totalSizeCap>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!--文件达到 最大4G时会被压缩和切割 -->
<maxFileSize>4096 MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender>
<!-- 把所有启用的日志记录请求打印到,配置的appender上,如下面配置的是STDOUT和 FILE-OUT -->
<root level="info">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE-OUT" />
</root>
</configuration>
参考1: log4j2入门(三) PatternLayout输出格式详解
参考2: logback日志框架详解
自定义traceId,以便日志追踪
集群和微服务情况下,日志追踪比较麻烦,自定义一个traceId,查询日志时,只需要查询对应的traceId就能找到一次请求的所有日志
//urlPatterns = "/*" 表示过滤所有请求
@WebFilter(urlPatterns = "/*", filterName = "traceIdFilter")
//@Order注解控制优先级,数值越小越先执行
@Order(1)
@Component
public class TraceIdFilter extends GenericFilterBean {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
String traceId = req.getHeader(TraceIdUtils.TRACE_ID);
TraceIdUtils.setTraceId(traceId);
filterChain.doFilter(request, response);
}
}
//traceId工具类
@Slf4j
public class TraceIdUtils {
public static final String TRACE_ID = "traceId";
public TraceIdUtils() {
}
private static String genTraceId() {
return RandomStringUtils.randomAlphanumeric(10);
}
public static void setTraceId(String traceId) {
traceId = StringUtils.isBlank(traceId) ? StringUtils.substring(genTraceId(), -10) : traceId;
MDC.put(TRACE_ID, traceId);
}
public static String getTraceId() {
String traceId = MDC.get(TRACE_ID);
return StringUtils.isBlank(traceId) ? genTraceId() : traceId;
}
}
前端请求后端接口时,每次请求都要在header中放一个随机生成的traceId
这样,每个请求的日志都可以通过traceId查到了
标签:traceId,String,自定义,日志,logback,public From: https://www.cnblogs.com/joule/p/17090191.html