gpt4 book ai didi

java - 在 spring mvc log4j 中为每条日志消息添加字符串前缀

转载 作者:行者123 更新时间:2023-11-30 10:21:46 24 4
gpt4 key购买 nike

我想将我的字符串作为前缀添加到应用程序中的每条日志消息中。我的意思是,我有几个 Java 应用程序,我希望其中一个在消息中有一些前缀,例如:

DATE,INFO(或其他),[sample](-->这是我添加的字符串),标准消息的其余部分

我看过几个教程,但没有一个适合我。我已经在 pom 中包含了依赖:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</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>

对此您有什么技巧或简单的解决方案吗?编写某种包装器或配置类?

最佳答案

映射诊断上下文 (MDC) 日志允许您设置与当前线程关联的属性,以便 SLF4J(通过您的记录器实现库)可以在每个日志语句中记录这些属性,而无需指定。所以你需要的是把你的前缀文本放在 MDC 中。如果您使用的是 Spring MVC,那么一种方法是实现 HandlerInterceptor。

import org.slf4j.MDC;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LoggingInterceptor extends HandlerInterceptorAdapter {

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
MDC.put("PREFIX", "your text");
return true;
}

@Override
public void afterConcurrentHandlingStarted(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
MDC.clear();
}

@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
MDC.clear();
}
}

import com.tigerit.kai.education.util.LoggingInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@Configuration
public class BeanConfiguration {

@Bean
public LoggingInterceptor loggingHandlerInterceptor() {
return new LoggingInterceptor();
}

@Bean
public WebMvcConfigurerAdapter webConfigurer() {
return new WebMvcConfigurerAdapter() {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(loggingHandlerInterceptor());
}
};
}
}

最后在application.properties中添加以下内容

logging.pattern.console=%d %-4r [%thread] %-5level PREFIX=%X{PREFIX} - %msg%n

关于java - 在 spring mvc log4j 中为每条日志消息添加字符串前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47670234/

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