> ## Documentation Index
> Fetch the complete documentation index at: https://docs.appsignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Formatação de logs JSON

<Warning>
  🔐 Não envie <strong>Informações Pessoais Identificáveis (PII)</strong> para a AppSignal. Filtre PII (por exemplo, nomes, e-mails) dos logs e use um ID, hash ou identificador pseudonimizado no lugar. <br /> <br /> Para **entidades cobertas pela HIPAA**, mais informações sobre como assinar um Business Associate Agreement (BAA) podem ser encontradas em nossa [documentação de Business Add-Ons](/support/business-add-ons).
</Warning>

Esta documentação explica como o AppSignal oferece suporte a mensagens de log formatadas em JSON.

## JSON

Se você especificar JSON como seu formato de log, o AppSignal fará o parsing da `message` de log recebida como pares chave-valor. Cada par chave-valor será armazenado como um atributo na linha de log, permitindo que você filtre e pesquise por linhas de log específicas com base em seus atributos.

### Exemplos

O exemplo a seguir mostra como o AppSignal faz o parsing de uma `message` de log no formato JSON.

<CodeGroup>
  ```json JSON theme={null}
  {
    "timestamp": "2022-06-02T04:17:25.783Z",
    "group": "organisations",
    "severity": "warn",
    "hostname": "frontend1",
    "message": "This is a test message",
    "org": "appsignal",
    "step": 1,
    "seen_terms": true,
    "entries": 10.01,
    "user": { "id": 1, "remote_id": "123" }
  }
  ```
</CodeGroup>

#### Mensagem

O JSON acima será parseado com a mensagem `"this is a test message"`.
Você pode usar a chave `msg` ou `message` para sobrescrever a mensagem.

Se nenhuma chave `msg` ou `message` estiver disponível, a linha de log inteira será usada como mensagem.

#### Sobrescritas

Os atributos de log da plataforma ou integração (como hostname, timestamp e group definidos, por exemplo, pela plataforma Heroku) podem ser sobrescritos pelos valores da mensagem JSON.

| Chave do atributo | Tipo     |
| ----------------- | -------- |
| group             | String   |
| severity          | Severity |
| hostname          | String   |
| message           | String   |

A `severity` pode conter um dos seguintes valores: `unknown`, `trace`, `debug`, `info`, `notice`, `warn`, `error`, `critical`, `alert` e `fatal`.

Essa é uma excelente maneira de controlar a severidade das suas linhas de log a partir da aplicação, independentemente da severidade (geralmente padrão `info`) definida pela plataforma ou integração.

#### Atributos

Qualquer outro par chave/valor é adicionado como atributo pesquisável:

| Chave do atributo | Tipo   | Valor       |
| ----------------- | ------ | ----------- |
| org               | String | "appsignal" |
| step              | Int    | 1           |
| seen\_terms       | Bool   | true        |
| entries           | Double | 10.01       |
| user.id           | Int    | 1           |
| user.remote\_id   | String | "123"       |

## Regras de formatação

<Note>
  As chaves devem ser strings alfanuméricas. Valores de array não são suportados.
</Note>

**Comportamento das chaves:**

* Se um par chave-valor tiver uma chave com o nome `msg` ou `message`, o valor dessa chave será parseado como a mensagem de log.
* Se nenhuma chave message/msg estiver disponível, a linha de log inteira será considerada a mensagem.
* As chaves devem ser alfanuméricas.
* As chaves não podem conter espaços, mas podem conter pontos finais (`.`), sublinhados (`_`) e hifens (`-`).
* As chaves não podem conter mais de 50 caracteres

**Comportamento dos valores:**

* Os valores não devem ter mais de 255 caracteres
* Não mais que 25 atributos por mensagem de log.
* Os valores podem conter objetos aninhados, mas não Arrays.
* Os valores podem ser dos seguintes tipos:
  * String
  * Integer (por exemplo, `10`)
  * Double (por exemplo, `10.01`)
  * Boolean (`true`/`false`)
  * Object (por exemplo, `{ "foo": "bar" }`)

Para objetos aninhados, os atributos serão achatados, separados por um caractere `.`.

Pares chave-valor que não seguem essas regras são anexados à mensagem de um log, a menos que uma chave `message` ou `msg` seja fornecida.
