logback日志配置和自定义日志参数

该文介绍了如何配置logback日志框架,包括设置日志文件路径、控制台和文件输出格式。此外,还讲解了如何自定义traceId以实现跨服务日志追踪,通过在请求头添加traceId,确保每个请求的相关日志可以通过该ID关联起来。
摘要由CSDN通过智能技术生成

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查到了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值