Skip to main content
Esta documentação descreve como configurar o logging com a integração AppSignal for Java.

Configurar logging

🔐 Não envie Informações Pessoais Identificáveis (PII) para a AppSignal. Filtre PII (por exemplo, nomes, e-mails) dos logs e use um ID, hash ou identificador pseudonimizado no lugar.

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.
Você não precisa criar uma fonte de log para enviar logs da integração AppSignal for Java. Uma fonte de log “application” será criada automaticamente. A integração Java utiliza os recursos de logging do OpenTelemetry para enviar logs ao AppSignal.

Uso autônomo

Para usar o logging com OpenTelemetry em Java, você precisa configurar o logger usando o LoggerProvider do OpenTelemetry.
import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.api.logs.Logger;
import io.opentelemetry.api.logs.LoggerProvider;
import io.opentelemetry.api.logs.Severity;

public class MyApplication {
    public void logMessages() {
        // Get the logger from the global logger provider
        LoggerProvider loggerProvider = GlobalOpenTelemetry.getLoggerProvider();
        Logger logger = loggerProvider.get("my-app");

        // Log a message
        logger.logRecordBuilder()
            .setSeverity(Severity.INFO)
            .setBody("Log message line")
            .emit();
    }
}

Uso com Log4j

O Log4j é instrumentado automaticamente pelo agente Java do OpenTelemetry. Logs emitidos usando Log4j2 serão enviados automaticamente ao AppSignal. Contextos adicionados usando ThreadContext ou dentro de logs StructuredDataMessage serão exibidos como tags de log no AppSignal.
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.ThreadContext;
import org.apache.logging.log4j.message.StructuredDataMessage;

public class MyService {
    private static final Logger logger = LogManager.getLogger(MyService.class);

    public void processOrder(String orderId) {
        // This will be shown as a tag in AppSignal for all log lines
        ThreadContext.put("order_id", orderId);

        logger.info("Processing order");

        StructuredDataMessage structuredMessage = new StructuredDataMessage(
            "processing_items", // ID (not shown in AppSignal)
            String.format("Processing items in order"), // Message
            "order" // Type (not shown in AppSignal)
        );

        // This will be shown as a tag in AppSignal for this log line
        structuredMessage.put("item_count", 123);
        logger.info(structuredMessage);

        ThreadContext.clearAll();
    }
}

Uso com java.util.logging

O framework de logging embutido do Java, java.util.logging, é instrumentado automaticamente pelo agente Java do OpenTelemetry. Logs emitidos usando java.util.logging serão enviados automaticamente ao AppSignal.
import java.util.logging.Logger;
import java.util.logging.Level;

public class MyApplication {
    private static final Logger logger = Logger.getLogger(MyApplication.class.getName());

    public void doSomething() {
        logger.info("Application started");
        logger.log(Level.WARNING, "This is a warning message");
        logger.severe("This is an error message");
    }
}

Uso

Enviando logs

Usando o logger do OpenTelemetry diretamente, você pode definir o nível de severidade dos seus logs:
import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.api.logs.Logger;
import io.opentelemetry.api.logs.LoggerProvider;
import io.opentelemetry.api.logs.Severity;

public class MyApplication {
    public void sendLogs() {
        // Get the logger from the global logger provider
        LoggerProvider loggerProvider = GlobalOpenTelemetry.getLoggerProvider();
        Logger logger = loggerProvider.get("my-app");

        // Different severity levels
        logger.logRecordBuilder()
            .setSeverity(Severity.WARN)
            .setBody("Something went wrong")
            .emit();

        logger.logRecordBuilder()
            .setSeverity(Severity.INFO)
            .setBody("Action completed successfully")
            .emit();

        logger.logRecordBuilder()
            .setSeverity(Severity.ERROR)
            .setBody("Database connection failed")
            .emit();
    }
}
Você pode definir atributos personalizados para enviar informações de log que podem ser usadas ao filtrar e consultar logs:
import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.api.common.AttributeKey;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.logs.Logger;
import io.opentelemetry.api.logs.LoggerProvider;
import io.opentelemetry.api.logs.Severity;

public class InvoiceService {
    public void generateInvoice(Customer customer) {
        LoggerProvider loggerProvider = GlobalOpenTelemetry.getLoggerProvider();
        Logger logger = loggerProvider.get("invoice_helper");

        logger.logRecordBuilder()
            .setSeverity(Severity.INFO)
            .setBody("Generating invoice for customer")
            .setAllAttributes(Attributes.of(
                AttributeKey.stringKey("customer_id"), customer.getId()
            ))
            .emit();
    }
}
Você pode consultar e filtrar pelo conteúdo da mensagem e pelos valores dos atributos dentro da ferramenta Log Management. Uma vez configurados, os atributos desejados serão enviados ao AppSignal como tags de log e poderão ser consultados na interface de logging do AppSignal.

Filtrando logs

Você pode usar a opção de configuração ignore_logs para ignorar linhas de log. Veja nosso guia Ignore Logs para saber mais.

Precisa de ajuda?

Depois de configurar sua aplicação Java para enviar logs, os logs devem aparecer no AppSignal. Se você tiver dúvidas sobre este passo ou o AppSignal não estiver recebendo logs, você sempre pode entrar em contato para obter ajuda. Vamos te ajudar a voltar ao normal!