

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 啟用追蹤與日誌的關聯
<a name="Application-Signals-TraceLogCorrelation"></a>

可以在 Application Signals 中啟用*追蹤與日誌的關聯*。這會自動將追蹤 ID 和範圍 ID 注入相關的應用程式日誌。然後，當您在 Application Signals 主控台中開啟追蹤詳細資訊頁面時，與當前追蹤關聯的相關日誌條目 (如有) 會自動顯示於頁面底部。

例如，假設您注意到延遲圖表出現突發性飆升。可以選擇圖表上的點，以載入該時間點的診斷資訊。然後，可以選擇相關的追蹤以取得更多資訊。當您檢視追蹤資訊時，可以向下捲動以查看與追蹤相關聯的日誌。這些日誌可能揭示與導致延遲飆升問題相關的模式或錯誤代碼。

為實現追蹤日誌關聯，Application Signals 依賴以下要素：
+ 適用於 Java 的 [Logger MDC 自動檢測](https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/docs/logger-mdc-instrumentation.md)。
+ 適用於 Python 的 [OpenTelemetry 記錄檢測](https://opentelemetry-python-contrib.readthedocs.io/en/latest/instrumentation/logging/logging.html)。
+ 適用於 Node.js 的 [Pino](https://www.npmjs.com/package/@opentelemetry/instrumentation-pino)、[Winston](https://www.npmjs.com/package/@opentelemetry/instrumentation-winston) 或 [Bunyan](https://www.npmjs.com/package/@opentelemetry/instrumentation-bunyan) 自動檢測。

所有這些檢測都由 OpenTelemetry 社群提供。Application Signals 會使用它們將追蹤內容 (例如追蹤 ID 與範圍 ID) 注入應用程式日誌。若要啟用此功能，必須手動變更記錄組態以啟用自動檢測。

視執行應用程式的架構而定，除遵循本節中的步驟之外，可能還必須設定環境變數來啟用追蹤日誌關聯。
+ 在 Amazon EKS 上，無需執行任何後續步驟。
+ 在 Amazon ECS 上，無需執行任何後續步驟。
+ 在 Amazon EC2 上，請參閱 [步驟 3：檢測您的應用程式並啟動它](CloudWatch-Application-Signals-Enable-EC2Main.md#CloudWatch-Application-Signals-Enable-Other-instrument) 程序中的步驟 4。

在您啟用追蹤日誌關聯之後，

## 追蹤日誌關聯設定範例
<a name="Application-Signals-TraceLogCorrelation-Examples"></a>

本節包含在多個環境中設定追蹤日誌關聯的範例。

**適用於 Java 的 Spring Boot**

假設您在名為 `custom-app` 的資料夾中有 Spring Boot 應用程式。應用程式組態通常是名為 `custom-app/src/main/resources/application.yml` 的 YAML 檔案，可能如下所示：

```
spring:
  application:
    name: custom-app
  config:
    import: optional:configserver:${CONFIG_SERVER_URL:http://localhost:8888/}
    
...
```

若要啟用追蹤日誌關聯，新增下列記錄組態。

```
spring:
  application:
    name: custom-app
  config:
    import: optional:configserver:${CONFIG_SERVER_URL:http://localhost:8888/}
    
...    

logging:
  pattern:
    level: trace_id=%mdc{trace_id} span_id=%mdc{span_id} trace_flags=%mdc{trace_flags} %5p
```

**適用於 Java 的 Logback**

在記錄組態 (例如 logback.xml) 中，將追蹤內容 `trace_id=%mdc{trace_id} span_id=%mdc{span_id} trace_flags=%mdc{trace_flags} %5p` 插入編碼器的 `pattern`。例如，以下組態會在日誌訊息之前加上追蹤內容。

```
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
  <file>app.log</file>
  <append>true</append>
  <encoder> 
    <pattern>trace_id=%mdc{trace_id} span_id=%mdc{span_id} trace_flags=%mdc{trace_flags} %5p - %m%n</pattern> 
  </encoder>
</appender>
```

如需 Logback 中編碼器的詳細資訊，請參閱 Logback 文件中的[編碼器](https://logback.qos.ch/manual/encoders.html)。

**適用於 Java 的 Log4j2**

在記錄組態 (例如 log4j2.xml) 中，將追蹤內容 `trace_id=%mdc{trace_id} span_id=%mdc{span_id} trace_flags=%mdc{trace_flags} %5p` 插入 `PatternLayout`。例如，以下組態會在日誌訊息之前加上追蹤內容。

```
<Appenders>
  <File name="FILE" fileName="app.log">
    <PatternLayout pattern="trace_id=%mdc{trace_id} span_id=%mdc{span_id} trace_flags=%mdc{trace_flags} %5p - %m%n"/>
  </File>
</Appenders>
```

如需 Log4j2 中模式配置的詳細資訊，請參閱 Log4j2 文件中的[模式配置](https://logging.apache.org/log4j/2.x/manual/layouts.html#Pattern_Layout)。

**適用於 Java 的 Log4j**

在記錄組態 (例如 log4j.xml) 中，將追蹤內容 `trace_id=%mdc{trace_id} span_id=%mdc{span_id} trace_flags=%mdc{trace_flags} %5p` 插入 `PatternLayout`。例如，以下組態會在日誌訊息之前加上追蹤內容。

```
<appender name="FILE" class="org.apache.log4j.FileAppender">;
  <param name="File" value="app.log"/>;
  <param name="Append" value="true"/>;
  <layout class="org.apache.log4j.PatternLayout">;
    <param name="ConversionPattern" value="trace_id=%mdc{trace_id} span_id=%mdc{span_id} trace_flags=%mdc{trace_flags} %5p - %m%n"/>;
  </layout>;
</appender>;
```

如需 Log4j 中模式配置的詳細資訊，請參閱 Log4j 文件中的[類別模式配置](https://logging.apache.org/log4j/1.x/apidocs/org/apache/log4j/PatternLayout.html)。

**Python**

在執行應用程式時，將環境變數 `OTEL_PYTHON_LOG_CORRELATION` 設定為 `true`。如需詳細資訊，請參閱 Python OpenTelemetry 文件中的[啟用追蹤內容注入](https://opentelemetry-python-contrib.readthedocs.io/en/latest/instrumentation/logging/logging.html#enable-trace-context-injection)。

**Node.js**

如需有關在 Node.js 中為支援的日誌記錄庫啟用追蹤內容注入的詳細資訊，請參閱 [Pino](https://www.npmjs.com/package/@opentelemetry/instrumentation-pino)、[Winston](https://www.npmjs.com/package/@opentelemetry/instrumentation-winston) 或 [Bunyan](https://www.npmjs.com/package/@opentelemetry/instrumentation-bunyan) 自動檢測的 NPM 使用文件。