繁体   English   中英

Log4j2 我可以在 log4j2 的模式布局中包含用户名吗?

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM