Log4j2のLog4jNestedDiagnosticContextFilter

ammerzon

Spring 4.2.1の時点で、Log4jNestedDiagnosticContextFilter以下に示すように、log4j1.xに対するApacheのEOL宣言に従って非推奨になりました。

ここに画像の説明を入力してください

対応するJIRAチケット(SPR-13400を見つけましたが、Log4j 2をSpring環境に持ち込んで、同じことを行うにはどうすればよいLog4jNestedDiagnosticContextFilterですか?

ammerzon

をコピーして自分で実装しLog4jNestedDiagnosticContextFilter、ロガーをLog4j 2に適合させて、に変更NDCしましたThreadContext

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.ThreadContext;
import org.springframework.web.filter.AbstractRequestLoggingFilter;

import javax.servlet.http.HttpServletRequest;

public class CustomRequestLoggingFilter extends AbstractRequestLoggingFilter {

  protected final Logger log4jLogger = LogManager.getLogger(getClass());

  @Override
  protected void beforeRequest(HttpServletRequest request, String message) {
    if (log4jLogger.isDebugEnabled()) {
      log4jLogger.debug(message);
    }
    ThreadContext.push(getNestedDiagnosticContextMessage(request));
  }

  @Override
  protected void afterRequest(HttpServletRequest request, String message) {
    ThreadContext.pop();
    if (ThreadContext.getDepth() == 0) {
      ThreadContext.removeStack();
    }
    if (log4jLogger.isDebugEnabled()) {
      log4jLogger.debug(message);
    }
  }

  protected String getNestedDiagnosticContextMessage(HttpServletRequest request) {
    return createMessage(request, "", "");
  }
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事