Skip to main content
Diese Dokumentation beschreibt, wie Sie Logging mit der AppSignal for Java-Integration konfigurieren.

Logging konfigurieren

🔐 Senden Sie keine personenbezogenen Daten (Personal Identifiable Information, PII) an AppSignal. Filtern Sie PII (z. B. Namen, E-Mail-Adressen) aus Logs und verwenden Sie stattdessen eine ID, einen Hash oder einen pseudonymisierten Bezeichner.

Für HIPAA-pflichtige Stellen finden Sie weitere Informationen zum Abschluss eines Business Associate Agreement (BAA) in unserer Business Add-Ons-Dokumentation.
Sie müssen keine Log-Quelle erstellen, um Logs aus der AppSignal for Java-Integration zu senden. Eine “application”-Log-Quelle wird automatisch erstellt. Die Java-Integration nutzt die Logging-Funktionen von OpenTelemetry, um Logs an AppSignal zu senden.

Eigenständige Verwendung

Um Logging mit OpenTelemetry in Java zu verwenden, müssen Sie den Logger mithilfe des OpenTelemetry LoggerProvider einrichten.
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();
    }
}

Verwendung mit Log4j

Log4j wird vom OpenTelemetry Java-Agent automatisch instrumentiert. Mit Log4j2 ausgegebene Logs werden automatisch an AppSignal gesendet. Kontext, der über ThreadContext oder innerhalb von StructuredDataMessage-Logs hinzugefügt wird, wird in AppSignal als Log-Tag angezeigt.
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();
    }
}

Verwendung mit java.util.logging

Javas integriertes Logging-Framework java.util.logging wird vom OpenTelemetry Java-Agent automatisch instrumentiert. Logs, die über java.util.logging ausgegeben werden, werden automatisch an AppSignal gesendet.
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");
    }
}

Verwendung

Logs senden

Mit dem OpenTelemetry-Logger direkt können Sie die Severity-Stufe Ihrer Logs definieren:
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();
    }
}
Sie können benutzerdefinierte Attribute definieren, um Log-Informationen zu senden, die beim Filtern und Abfragen von Logs verwendet werden können:
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();
    }
}
Sie können Nachrichteninhalte und Attributwerte aus dem Log-Management-Tool heraus abfragen und filtern. Nach der Konfiguration werden die gewünschten Attribute als Log-Tags an AppSignal gesendet und sind in der AppSignal Logging-Oberfläche abfragbar.

Logs filtern

Sie können die Konfigurationsoption ignore_logs verwenden, um Log-Zeilen zu ignorieren. Lesen Sie unseren Leitfaden zum Ignorieren von Logs, um mehr zu erfahren.

Brauchen Sie Hilfe?

Nachdem Sie Ihre Java-Anwendung so konfiguriert haben, dass sie Logs sendet, sollten die Logs in AppSignal erscheinen. Wenn Sie sich bei diesem Schritt unsicher sind oder AppSignal keine Logs empfängt, können Sie sich jederzeit für Unterstützung an uns wenden. Wir helfen Ihnen, wieder auf Kurs zu kommen!