环绕日志条目的方面
Aspect to wrap around log entries
我在整个 spring 应用程序中使用 sl4j 记录器。
我想将自定义字符串附加到整个应用程序中完成的所有日志条目(info/trace/debug 等)。理想情况下,这将使用一个方面来完成,但我不确定该方面将采用什么格式。我假设
@Around("org.slf4j.Logger.info(*)")
但是我找不到任何可靠的方法来使它正确地应用于所有涉及的方法。
如@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>
但是,这似乎并不适用于我的所有消息。一些警告似乎没有显示该字段。目前正在调查中。
我在整个 spring 应用程序中使用 sl4j 记录器。
我想将自定义字符串附加到整个应用程序中完成的所有日志条目(info/trace/debug 等)。理想情况下,这将使用一个方面来完成,但我不确定该方面将采用什么格式。我假设
@Around("org.slf4j.Logger.info(*)")
但是我找不到任何可靠的方法来使它正确地应用于所有涉及的方法。
如@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>
但是,这似乎并不适用于我的所有消息。一些警告似乎没有显示该字段。目前正在调查中。