[英]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.