簡體   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