

# Habilitar a correlação entre rastreamento e logs
<a name="Application-Signals-TraceLogCorrelation"></a>

Você pode habilitar a *correlação entre rastreamento e logs* no Application Signals. Isso injeta automaticamente IDs de rastreamento e IDs de spam nos logs relevantes da aplicação. Depois, ao abrir uma página de detalhes do rastreamento no console do Application Signals, as entradas de log relevantes (se houver) que se correlacionam com o rastreamento atual aparecem automaticamente na parte inferior da página.

Por exemplo, suponha que você observe um pico no grafo de latência. Você pode escolher o ponto no grafo para carregar as informações de diagnóstico desse ponto no tempo. Você então escolhe o rastreamento relevante para obter mais informações. Ao visualizar as informações do rastreamento, você pode rolar para baixo para ver os logs associados a ele. Esses logs podem revelar padrões ou códigos de erro associados aos problemas que causam o pico de latência.

Para obter a correlação de log de rastreamento, o Application Signals depende do seguinte:
+ [Instrumentação automática do Logger MDC](https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/docs/logger-mdc-instrumentation.md) para Java.
+ [Instrumentação de registro em log do OpenTelemetry](https://opentelemetry-python-contrib.readthedocs.io/en/latest/instrumentation/logging/logging.html) para Python.
+ As instrumentações automáticas do [Pino](https://www.npmjs.com/package/@opentelemetry/instrumentation-pino), [Winston](https://www.npmjs.com/package/@opentelemetry/instrumentation-winston) ou [Bunyan](https://www.npmjs.com/package/@opentelemetry/instrumentation-bunyan) para Node.js.

Todas essas instrumentações são fornecidas pela comunidade do OpenTelemetry. O Application Signals usa essas instrumentações para injetar contextos de rastreamento, como o ID do rastreamento e o ID da extensão, nos logs da aplicação. Para habilitá-las, você deve alterar manualmente sua configuração de registro em log para habilitar a instrumentação automática. 

Dependendo da arquitetura em que sua aplicação é executada, talvez também seja necessário definir uma variável de ambiente para ativar a correlação de logs de rastreamento, além de seguir as etapas desta seção.
+ No Amazon EKS, nenhuma etapa adicional é necessária.
+ No Amazon ECS, nenhuma etapa adicional é necessária.
+ No Amazon EC2, consulte a etapa 4 no procedimento na [Etapa 3: instrumentalizar a aplicação e iniciá-la](CloudWatch-Application-Signals-Enable-EC2Main.md#CloudWatch-Application-Signals-Enable-Other-instrument).

Depois de habilitar a correlação de logs de rastreamento, 

## Exemplos de configuração de correlação de logs de rastreamento
<a name="Application-Signals-TraceLogCorrelation-Examples"></a>

Esta seção contém exemplos de como configurar a correlação de logs de rastreamento em vários ambientes.

**Spring Boot para Java**

Suponha que você tenha uma aplicação Spring Boot em uma pasta chamada `custom-app`. Geralmente, a configuração da aplicação é um arquivo YAML chamado `custom-app/src/main/resources/application.yml` que pode ser apresentado como abaixo: 

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

Para habilitar a correlação de logs de rastreamento, adicione a configuração de registro em log a seguir.

```
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
```

**Logback para Java**

Na configuração de registro em log (como logback.xml), insira o contexto de rastreamento `trace_id=%mdc{trace_id} span_id=%mdc{span_id} trace_flags=%mdc{trace_flags} %5p` em `pattern` do codificador. Por exemplo, a configuração a seguir adiciona o contexto de rastreamento antes da mensagem de log.

```
<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>
```

Para obter mais informações sobre codificadores no Logback, consulte [Encoders](https://logback.qos.ch/manual/encoders.html) na documentação do Logback.

**Log4j2 para Java**

Na configuração de registro em log (como log4j2.xml), insira o contexto de rastreamento `trace_id=%mdc{trace_id} span_id=%mdc{span_id} trace_flags=%mdc{trace_flags} %5p` em `PatternLayout`. Por exemplo, a configuração a seguir adiciona o contexto de rastreamento antes da mensagem de log.

```
<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>
```

Para obter mais informações sobre layouts de padrões no Log4j2, consulte [Pattern Layout](https://logging.apache.org/log4j/2.x/manual/layouts.html#Pattern_Layout) na documentação do Log4j2.

**Log4j para Java**

Na configuração de registro em log (como log4j.xml), insira o contexto de rastreamento `trace_id=%mdc{trace_id} span_id=%mdc{span_id} trace_flags=%mdc{trace_flags} %5p` em `PatternLayout`. Por exemplo, a configuração a seguir adiciona o contexto de rastreamento antes da mensagem de log.

```
<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>;
```

Para obter mais informações sobre layouts de padrões no Log4j, consulte [Class Pattern Layout](https://logging.apache.org/log4j/1.x/apidocs/org/apache/log4j/PatternLayout.html) na documentação do Log4j.

**Python**

Defina a variável de ambiente `OTEL_PYTHON_LOG_CORRELATION` como `true` enquanto executa sua aplicação. Para obter mais informações, consulte [Enable trace context injection](https://opentelemetry-python-contrib.readthedocs.io/en/latest/instrumentation/logging/logging.html#enable-trace-context-injection) na documentação do OpenTelemetry para Python.

**Node.js**

Para obter mais informações sobre como habilitar a injeção de contextos de rastreamento em Node.js para as bibliotecas de registro em log com suporte, consulte a documentação de uso do NPM para as instrumentações automáticas do [Pino](https://www.npmjs.com/package/@opentelemetry/instrumentation-pino), [Winston](https://www.npmjs.com/package/@opentelemetry/instrumentation-winston) ou [Bunyan](https://www.npmjs.com/package/@opentelemetry/instrumentation-bunyan) para Node.js.