<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # Log4j2 `ThreadContext` – 相同事務的魚標日志 > 原文: [https://howtodoinjava.com/log4j2/threadcontext-fish-tagging/](https://howtodoinjava.com/log4j2/threadcontext-fish-tagging/) Log4j2 [`ThreadContext`](https://logging.apache.org/log4j/2.0/log4j-api/apidocs/org/apache/logging/log4j/ThreadContext.html)允許您使用多個唯一的標簽標記日志語句,以分析日志,同時在運行時診斷問題 - 主要是在多線程應用中,其中應用會在短時間內生成大量日志。 例如。 您可能需要掃描所有日志以查找特定的用戶事務或完成會話。 此過程也稱為魚標(即,在每個日志語句中添加一些額外的上下文信息)。 魚標可以幫助使用自動化工具記錄日志,例如 [Splunk](http://www.splunk.com/) 。 讓我們看看如何在 log4j2 中將`ThreadContext`類用于[魚標](https://logging.apache.org/log4j/2.x/manual/thread-context.html)。 ## 在`ThreadContext`中添加上下文信息 為了唯一標記每個請求,`ThreadContext`提供了`put(String key, String value)`方法,該方法接受鍵及其值。 您可以根據需要添加任意數量的標簽以捕獲整個上下文信息。 請注意,`ThreadContext`類的所有方法都是靜態的。 ```java package com.howtodoinjava.log4j2.examples; import java.util.UUID; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.ThreadContext; public class Log4j2HelloWorldExample { private static final Logger LOGGER = LogManager.getLogger(Log4j2HelloWorldExample.class.getName()); public static void main(String[] args) { //Add context information ThreadContext.put("id", UUID.randomUUID().toString()); ThreadContext.put("ipAddress", "192.168.21.9"); LOGGER.debug("Debug Message Logged !!"); LOGGER.info("Info Message Logged !!"); LOGGER.debug("Another Debug Message !!"); //Clear the map ThreadContext.clearMap(); LOGGER.debug("Thread Context Cleaned up !!"); LOGGER.debug("Log message with no context information !!"); } } ``` 或者,您可以將`ThreadContext`的`Stack`實現與`ThreadContext.push(String value)`協作,如下所示: ```java //Add context information ThreadContext.push(UUID.randomUUID().toString()); ThreadContext.push("192.168.21.9"); LOGGER.debug("Debug Message Logged !!"); LOGGER.info("Info Message Logged !!"); LOGGER.debug("Another Debug Message !!"); //Clear the map ThreadContext.clearStack(); LOGGER.debug("Thread Context Cleaned up !!"); LOGGER.debug("Log message with no context information !!"); ``` 事務處理結束或不再需要上下文信息后,可以使用`ThreadContext.clearMap()`方法清空信息。 默認情況下,`ThreadContext`的棧和映射是按線程管理的,并且基于[`ThreadLocal`](//howtodoinjava.com/java/multi-threading/when-and-how-to-to-to-use-thread-local-variables/)。 通過將系統屬性`isThreadContextMapInheritable`設置為`true`,上下文映射的內容將傳遞給子線程。 ## 修改`log4j2.xml`中的轉換模式 現在要在日志語句中打印以上標記,您需要在 log4j2 配置文件中修改轉換模式。 ```java <?xml version="1.0" encoding="UTF-8"?> <Configuration status="INFO"> <Appenders> <Console name="console" target="SYSTEM_OUT"> <PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] [%X{id}] [%X{ipAddress}] %c{1} - %msg%n" /> </Console> </Appenders> <Loggers> <Root level="debug" additivity="false"> <AppenderRef ref="console" /> </Root> </Loggers> </Configuration> ``` * 單獨使用`%X`可以包含映射的全部內容。 * 使用`%X{key}`包含指定的鍵。 * 使用`%x`包含棧的全部內容。 現在,當您運行上面的代碼時 – 您將獲得以下輸出: ```java [DEBUG] 2016-06-21 13:09:56.485 [main] [7cdd4cf0-2c26-4b81-b374-1adce3781499] [192.168.21.9] Log4j2HelloWorldExample - Debug Message Logged !! [INFO ] 2016-06-21 13:09:56.487 [main] [7cdd4cf0-2c26-4b81-b374-1adce3781499] [192.168.21.9] Log4j2HelloWorldExample - Info Message Logged !! [DEBUG] 2016-06-21 13:09:56.487 [main] [7cdd4cf0-2c26-4b81-b374-1adce3781499] [192.168.21.9] Log4j2HelloWorldExample - Another Debug Message !! [DEBUG] 2016-06-21 13:09:56.487 [main] [] [] Log4j2HelloWorldExample - Thread Context Cleaned up !! [DEBUG] 2016-06-21 13:09:56.487 [main] [] [] Log4j2HelloWorldExample - Log message with no context information !! ``` 如您所見,前三個日志語句中添加了上下文信息 - 其他兩個語句沒有此類信息。 學習愉快!
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看