【问题标题】:Log4j2 Can I include users' name in pattern layout of log4j2?Log4j2 我可以在 log4j2 的模式布局中包含用户名吗?
【发布时间】:2021-08-19 07:39:13
【问题描述】:

我在我的应用程序中使用 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 值。

【问题讨论】:

    标签: java log4j2


    【解决方案1】:

    我假设 登录用户 您指的是活动事务的数据库用户。如果您可以将其放入 MDC 变量中(有多种方法可以访问 JDBC 用户名,请选择最适合您需要的那个),那么您可以通过 PatternLayouts %X 指令访问该值,例如,%X{jdbcUserName}

    【讨论】:

      【解决方案2】:

      如果您指的是数据库用户名,请使用Volkan Yazıcı's answer。如果您想要操作系统用户名,可以从 Java 系统属性“user.name”中获取,并且可以在配置中使用模式 ${sys:system.property.name}(您需要将 $ 字符加倍)。

      <pattern>... [$${sys:user.name}] ...</pattern>
      

      【讨论】:

        【解决方案3】:

        已解决。使用不记名令牌获取用户凭据,然后通过 ThreadContext 放置用户名。

                   if (bearerToken != null && bearerToken.startsWith("Bearer ")) {
                    UserCredential user = JWTUtil.parseToken(bearerToken.substring(7, bearerToken.length()));
                    ThreadContext.put("userName",  user.getUsername());
        
                }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-12-18
          • 2022-10-19
          • 2016-01-05
          • 2014-03-31
          • 2017-10-15
          • 2020-01-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多