包含日志条目的方面

时间:2015-11-03 09:19:10

标签: spring logging slf4j aspect

我在整个春季应用程序中使用sl4j Logger。

我想将自定义字符串附加到整个应用程序中完成的所有日志条目(info / trace / debug等)。理想情况下,这可以使用Aspect完成,但我不确定该方面的格式。我正在假设某些事情

 @Around("org.slf4j.Logger.info(*)")

然而,我找不到任何可靠的方法使这适用于所有正确的方法。

1 个答案:

答案 0 :(得分:0)

正如@PavelHoral所提到的以下是使用MDC的解决方案

创建自己的过滤器

import org.slf4j.MDC;

import javax.servlet.*;
import java.io.IOException;

public class MDCLoggingFilter implements Filter {

    @Override
    public void init(final FilterConfig filterConfig) throws ServletException {}

    @Override
    public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain) throws IOException, ServletException {

        MDC.put("myKey", "myValue");

        try {
            chain.doFilter(request, response);
        } finally {
            // remove the key once you are done with it
            MDC.remove("myKey");
        }
    }

    @Override
    public void destroy() {}

}

然后将您的过滤器添加到您的web.xml,如下所示

<filter>
    <filter-name>mdcLoggingFilter</filter-name>
    <filter-class>path.to.MDCLoggingFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>mdcLoggingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

但是,这似乎并不适用于我的所有邮件。一些警告似乎没有显示该字段。目前正在调查。