簡體   English   中英

打印任何錯誤時附加登錄的用戶

[英]Attach logged user when printing any error

我有一個配置了 logback 的 SpringBoot 后端。 使用 OncePerRequestFilter 並在 SecurityContextHolder 上下文中設置身份驗證來實現身份驗證。

我的目標是在 logback 打印錯誤時打印 loggedUser 用戶名。 我的嘗試是向 logback 模式添加一個變量(${LOGGED_USER}),然后使用以下代碼在 OncePerRequestFilter 中設置此變量:

     final Context context = (Context) LoggerFactory.getILoggerFactory();
     final JoranConfigurator configurator = new JoranConfigurator();
     configurator.setContext(context);
     context.putProperty("LOGGED_USER", username);
          try {
                configurator.doConfigure(Objects.requireNonNull(getClass().getResource("/logback.xml")));
          } catch (JoranException e) {
                logger.error("Error while configuring logger", e);
          }

這在本地主機環境中工作正常。 然而,在生產中,當生成錯誤時,記錄器輸出多次,顯示每個記錄的用戶名。 在我看來,我的代碼正在為每個請求創建一個新的記錄器上下文,並且它們都同時輸出錯誤。 我沒有想法,正在尋求幫助!

提前致謝

您是否嘗試使用映射診斷上下文來存儲用戶名。 以 %X{LOGGED_USER} 的模式訪問它

final Context context = (Context) LoggerFactory.getILoggerFactory();
 final JoranConfigurator configurator = new JoranConfigurator();
 configurator.setContext(context);
 MDC.put("LOGGED_USER", username);
      try {
            configurator.doConfigure(Objects.requireNonNull(getClass().getResource("/logback.xml")));
      } catch (JoranException e) {
            logger.error("Error while configuring logger", e);
      }

編輯-

由於您使用的是 OncePerRequestFilter,因此其他用戶的回答可能會對您有所幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM