在打印任何错误时附加已登录用户



我有一个配置了logback的SpringBoot后端。认证是使用OncePerRequestFilter和在SecurityContextHolder上下文中设置认证来实现的。

我的目标是在logback打印错误时打印loggedUser用户名。我的尝试是添加一个变量(${LOGGED_USER})到logback模式,然后使用下面的代码在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);
}

这在本地主机环境中工作良好。但是,在生产环境中,当产生错误时,日志记录器会输出多次,显示每个记录的用户名。在我看来,我的代码正在为每个请求创建一个新的日志上下文,并且它们都在同时输出错误。我无计可施,正在寻求帮助!

Thanks in advance

是否尝试使用映射诊断上下文存储用户名?以%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,因此其他用户的答案可能会对您有所帮助

相关内容

  • 没有找到相关文章

最新更新