gpt4 book ai didi

spring-logback - 在 spring boot 中使用 logback 打印特定标题

转载 作者:行者123 更新时间:2023-12-04 12:43:25 25 4
gpt4 key购买 nike

我正在使用 spring-boot 并使用 logback 生成日志。现在我想在每个日志中记录一个特定的标题。

我怎样才能做到这一点。

我的登录文件是

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<springProperty name="appName" source="spring.application.name" defaultValue="apigateway" />
<property name="LOG_PATH" value="${LOG_PATH}" />
<!-- Console logging -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
[%d{YYYY-MM-dd HH:mm:ss.SSS}] [%X{X-B3-CONVID:-}] [%X{X-B3-TraceId:-}] [%X{X-B3-SpanId:-}] [${HOSTNAME}] [%level] [${appName}] [%logger{36}.%M] - %msg %n
</pattern>
</encoder>
</appender>

<appender name="APPLICATIONLOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<append>true</append>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/applogs/application.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>60</maxHistory>
<totalSizeCap>20GB</totalSizeCap>
</rollingPolicy>

<encoder>
<Pattern>
[%d{YYYY-MM-dd HH:mm:ss.SSS}] [%X{X-B3-CONVID:-}] [%X{X-B3-TraceId:-}] [%X{X-B3-SpanId:-}] [${HOSTNAME}] [%level] [${appName}] [%logger{36}.%M] - %msg %n
</Pattern>
</encoder>
</appender>


<!-- set logger level: e.g. info, trace, debug, error -->
<root level="info">
<appender-ref ref="STDOUT" />
<appender-ref ref="APPLICATIONLOG" />
</root>

</configuration>

除此之外,我没有做任何事情来配置日志。
刚刚添加了 slf4j 的依赖项,然后添加了 logback spring 文件。

任何帮助表示赞赏

最佳答案

添加 [%X{TrasactionId}]在您的控制台和文件追加器模式中,例如

for STDOUT appender


<pattern>
[%d{YYYY-MM-dd HH:mm:ss.SSS}] [%X{TrasactionId}] [%X{X-B3-CONVID:-}] [%X{X-B3-TraceId:-}] [%X{X-B3-SpanId:-}] [${HOSTNAME}] [%level] [${appName}] [%logger{36}.%M] - %msg %n
</pattern>



for APPLICATIONLOG appender


<Pattern>
[%d{YYYY-MM-dd HH:mm:ss.SSS}] [%X{TrasactionId}] [%X{X-B3-CONVID:-}] [%X{X-B3-TraceId:-}] [%X{X-B3-SpanId:-}] [${HOSTNAME}] [%level] [${appName}] [%logger{36}.%M] - %msg %n
</Pattern>

并遵循项目中的代码。
import org.slf4j.MDC;

import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.container.ContainerResponseContext;
import javax.ws.rs.container.ContainerResponseFilter;
import javax.ws.rs.core.Response;

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class ClientFilter implements ContainerRequestFilter, ContainerResponseFilter {

private final String TRANSACTION_ID = "TrasactionId";
@Override
public void filter(ContainerRequestContext requestContext) {
final String transactionId = requestContext.getHeaderString(TRANSACTION_ID);
if (transactionId == null || transactionId == "") {
log.debug("transactionId is null/empty");
return;
}
MDC.put(TRANSACTION_ID, TRANSACTION_ID + ":" + transactionId);
// other logic based on this based on your requirement
}

@Override
public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) {
final String transactionId = requestContext.getHeaderString(TRANSACTION_ID);
if (transactionId == null || transactionId == "") {
return;
}
responseContext.getHeaders().add(TRANSACTION_ID, transactionId);
MDC.remove(TRANSACTION_ID);
}

}

这将添加如下日志以及其他文本
[2018-06-20 11:37:31.638] [TrasactionId:75c2f962-fcdc-452e-bf7e-eddc6453673e] [6e2260ca8c4f51e4] [6e2260ca8c4f51e4] [serverName] [ERROR] [apigateway [c.s.u.c.PerformanceMetricsLogger.logRequestsWithTimeGreaterThanThreshold] - Monitoring Data : API response time : Service : apigateway, API : commonapi/v1/info/getHamburgerData

笔记:
  • 确保标题值与 TrasactionId 相同,或在任何地方添加相同的字符串以使其工作。
  • 将客户注册到 Jersey jersey.register(ClientFilter.class);
  • 关于spring-logback - 在 spring boot 中使用 logback 打印特定标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50941105/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com