[英]Log4j2 Can I include users' name in pattern layout of log4j2?
我在我的应用程序中使用 Log4j2 作为记录器。 我想自定义记录器消息并将登录的用户名包含在模式布局中,例如:2021-06-01 03:29:06.636 [CURRENT_USER] WARN 1 --- [nio-8002-exec-7] com .zaxxer.hikari.pool.PoolBase:HikariPool-1 - 无法验证连接 org.postgresql.jdbc.PgConnection@6813ce6c(此连接已关闭。)。 可能考虑使用更短的 maxLifetime 值。
我假设登录用户指的是活动事务的数据库用户。 如果您可以将其放入 MDC 变量中(有多种方法可以访问 JDBC 用户名,请选择最适合您需要的那个),那么您可以通过PatternLayout s %X
指令访问该值,例如%X{jdbcUserName}
。
如果您指的是数据库用户名,请使用Volkan Yazıcı 的答案。 如果您想要操作系统用户名,您可以从 Java 系统属性“user.name”中获取,您可以在配置中使用模式${sys:system.property.name}
(您需要将$
字符)。
<pattern>... [$${sys:user.name}] ...</pattern>
解决。 使用不记名令牌获取用户凭据,然后通过 ThreadContext 放置用户名。
if (bearerToken != null && bearerToken.startsWith("Bearer ")) {
UserCredential user = JWTUtil.parseToken(bearerToken.substring(7, bearerToken.length()));
ThreadContext.put("userName", user.getUsername());
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.