> ## 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.

# Logging aus Java

export const VersionRequirements = ({versions = []}) => {
  if (!Array.isArray(versions) || versions.length === 0) {
    return null;
  }
  const boundaries = {
    upper: " or lower",
    exact: "",
    lower: " or higher"
  };
  const containerStyle = {
    marginTop: "0.5rem",
    marginBottom: "1.5rem"
  };
  const lineStyle = {
    display: "block",
    margin: "0 0 0.35rem 0",
    fontSize: "0.875rem",
    lineHeight: "1.4"
  };
  const pillBaseStyle = {
    display: "inline-block",
    padding: "0.1em 0.4em",
    borderRadius: "0.25rem",
    border: "1px solid",
    fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace",
    fontSize: "0.85em",
    fontWeight: 500
  };
  const pillColors = {
    "AppSignal for Elixir": {
      background: "#f3e8ff",
      borderColor: "#e9d5ff",
      color: "#9333ea"
    },
    "AppSignal for Front-end": {
      background: "#fef9c3",
      borderColor: "#fde68a",
      color: "#ca8a04"
    },
    "AppSignal for Go": {
      background: "#ccfbf1",
      borderColor: "#99f6e4",
      color: "#0d9488"
    },
    "AppSignal for JavaScript": {
      background: "#fef9c3",
      borderColor: "#fde68a",
      color: "#ca8a04"
    },
    "AppSignal for Node.js": {
      background: "#dcfce7",
      borderColor: "#bbf7d0",
      color: "#16a34a"
    },
    "AppSignal for Python": {
      background: "#dbeafe",
      borderColor: "#bfdbfe",
      color: "#2563eb"
    },
    "AppSignal for Ruby": {
      background: "#fee2e2",
      borderColor: "#fecaca",
      color: "#dc2626"
    },
    "AppSignal for Rust": {
      background: "#ffedd5",
      borderColor: "#fed7aa",
      color: "#ea580c"
    }
  };
  const defaultPillColor = {
    background: "#f4f4f5",
    borderColor: "#e4e4e7",
    color: "#52525b"
  };
  const getPillStyle = name => ({
    ...pillBaseStyle,
    ...pillColors[name] || defaultPillColor
  });
  const getBoundText = bound => {
    return boundaries[bound] || boundaries.lower;
  };
  return <div style={containerStyle}>
      {versions.map((v, i) => <p key={`${v.name}-${v.version}-${v.bound || "lower"}-${i}`} style={lineStyle}>
          This feature requires{" "}
          <code style={getPillStyle(v.name)}>{v.name}</code> version {v.version}
          {getBoundText(v.bound)}.
        </p>)}
    </div>;
};

<VersionRequirements
  versions={[
{ name: "AppSignal Collector", version: "0.7.0" }
]}
/>

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

## Logging konfigurieren

<Warning>
  🔐 Senden Sie keine <strong>personenbezogenen Daten (Personal Identifiable Information, PII)</strong> 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. <br /> <br /> Für **HIPAA-pflichtige Stellen** finden Sie weitere Informationen zum Abschluss eines Business Associate Agreement (BAA) in unserer [Business Add-Ons-Dokumentation](/support/business-add-ons).
</Warning>

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.

<CodeGroup>
  ```java Java theme={null}
  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();
      }
  }
  ```
</CodeGroup>

### 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.

<CodeGroup>
  ```java Java theme={null}
  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();
      }
  }
  ```
</CodeGroup>

### 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.

<CodeGroup>
  ```java Java theme={null}
  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");
      }
  }
  ```
</CodeGroup>

## Verwendung

### Logs senden

Mit dem OpenTelemetry-Logger direkt können Sie die Severity-Stufe Ihrer Logs definieren:

<CodeGroup>
  ```java Java theme={null}
  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();
      }
  }
  ```
</CodeGroup>

Sie können benutzerdefinierte Attribute definieren, um Log-Informationen zu senden, die beim Filtern und Abfragen von Logs verwendet werden können:

<CodeGroup>
  ```java Java theme={null}
  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();
      }
  }
  ```
</CodeGroup>

Sie können Nachrichteninhalte und Attributwerte aus dem [Log-Management](/logging/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`](/java/configuration#option-ignore_logs) verwenden, um Log-Zeilen zu ignorieren. Lesen Sie [unseren Leitfaden zum Ignorieren von Logs](/guides/filter-data/ignore-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](mailto:support@appsignal.com). Wir helfen Ihnen, wieder auf Kurs zu kommen!
