如何在每个日志语句中打印.yml文件中提供的应用程序名称?

时间:2017-09-16 11:56:55

标签: java spring spring-boot log4j log4j2

我想在我的.yml日志中打印log4j文件中提供的应用程序名称

我的log4j模式是

LOG_PATTERN=[%d{yyyy-MM-dd HH:mm:ss.SSS}] boot%X{context} - ${PID} ${LOG_LEVEL_PATTERN} [%t] --- %c{1}: %m%n

目前我正在获取

等日志
2017-09-16 15:53:35.687 INFO 18302 --- [  restartedMain] mc.n.e.EurekaDiscoveryClientConfiguration : My Log print statement

我希望我的日志打印的格式

2017-09-16 15:53:35.687 INFO 18302 --- [**APPLICATION_NAME**] [  restartedMain] mc.n.e.EurekaDiscoveryClientConfiguration : My Log print statement

如何将应用程序名称放在log4j日志

1 个答案:

答案 0 :(得分:0)

假设这是一个Web应用程序,您可以使用过滤器和MDC

参见示例:

public class MDCFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        try {
            MDC.put("appName", "**APPLICATION_NAME**");
            chain.doFilter(request, response);
        } finally {
            MDC.remove("appName");
        }
    }
}

上面的过滤器会将您的应用名称放入MDC,然后您可以使用日志模式打印应用名称。

根据您的日志模式,请参阅以下修改:

%d{yyyy-MM-dd HH:mm:ss.SSS} boot%X{context} - ${PID} ${LOG_LEVEL_PATTERN} [%t] --- [%X{appName}%n] %c{1}: %m%n

注意:%X{appName}%n将输出过滤器MDC.put("appName", "**APPLICATION_NAME**");

中的内容

以上将输出以下内容:

2017-09-16 15:53:35.687 INFO 18302 --- [**APPLICATION_NAME**] [  restartedMain] mc.n.e.EurekaDiscoveryClientConfiguration : My Log print statement