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

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 for PHP", version: "0.5.0" }
]}
/>

Diese Dokumentation beschreibt, wie Sie Logging mit dem AppSignal for PHP-Paket 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 PHP-Integration zu senden. Eine "application"-Log-Quelle wird automatisch erstellt.

Das AppSignal for PHP-Paket nutzt die Logging-Funktionen von OpenTelemetry, um Logs an AppSignal zu senden.

### Laravel

Wenn Sie das Laravel-Framework verwenden, sendet das AppSignal for PHP-Paket Ihre Logs automatisch an AppSignal. Sie müssen Monolog nicht direkt konfigurieren.

### Symfony

Wenn Sie das Symfony-Framework verwenden, ist die einfachste Möglichkeit, Logs an AppSignal zu senden, die Verwendung des [`MonologBundle`](https://github.com/symfony/monolog-bundle).

Installieren Sie das Monolog Auto-Instrumentation-Paket.

```shell Shell theme={null}
composer require open-telemetry/opentelemetry-logger-monolog
```

Fügen Sie eine Service-Definition für `'appsignal.monolog.handler'` hinzu, die die Klasse `Appsignal\Integrations\Monolog\Handler` verwendet.

```yml title="config/services.yaml" theme={null}
services:
  # ... other services

  appsignal.monolog.handler:
    class: Appsignal\Integrations\Monolog\Handler
    factory: ['Appsignal\Integrations\Monolog\Handler', "withLevel"]
    arguments: ["info"] # configure log level that will reach AppSignal
```

Fügen Sie `appsignal.monolog.handler` zum Monolog-Handler-Stack hinzu.

```yml title="config/packages/monolog.yaml" theme={null}
monolog:
  handlers:
    # other handlers

    appsignal:
      type: service
      id: appsignal.monolog.handler
      channels: ["app", "event"] # configure which channels to send to AppSignal
```

### Monolog

[Monolog](https://github.com/Seldaek/monolog) ist die beliebteste Logging-Bibliothek für PHP. Sie können Monolog direkt verwenden, um Logs an AppSignal zu senden.

Installieren Sie das Monolog Auto-Instrumentation-Paket.

```shell Shell theme={null}
composer require open-telemetry/opentelemetry-logger-monolog
```

Fügen Sie dann `Appsignal\Integrations\Monolog\Handler` zum Handler-Stack von Monolog hinzu.

```php PHP theme={null}
use Appsignal\Integrations\Monolog\Handler;
use Monolog\Logger;

$logger = new Logger('app');
$logger->pushHandler(Handler::withLevel('info'));

$logger->info('My log message');
```

### Eigenständige Verwendung

Sie können Logs auch mit dem eigenständigen Logger senden, indem Sie die `log`-Hilfsmethode der `Appsignal`-Basisklasse verwenden. Diese Methode erfordert keine Konfiguration.

```php PHP theme={null}
use Appsignal\Appsignal;
use Appsignal\Severity;

// Log a message
Appsignal::log(
	message: 'Log message line',
	severity: Severity::INFO,
	loggerName: 'my-app',
	attributes: [
		'customer_id' => $customer->id,
	],
);
```

Konfigurieren Sie Monolog mit dem OpenTelemetry-Handler, um Logs an AppSignal zu senden:

```php PHP theme={null}
use Appsignal\Integrations\Monolog\Handler;
use Monolog\Logger;

// Create Monolog logger with the AppSignal handler
$logger = new Logger('app', [Handler::withLevel('info')]);

```

## Logs senden

### Monolog

Mit Monolog können Sie die Severity-Stufe Ihrer Logs definieren:

```php PHP theme={null}
$logger->warning("Something's gone terribly wrong here");
$logger->info('User action completed successfully');
$logger->error('Database connection failed');

// using Laravel's Log facade
Log::warning("Something's gone terribly wrong here");
Log::info('User action completed successfully');
Log::error('Database connection failed');
```

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

```php PHP theme={null}
$logger->info('Generating invoice for customer', ['customer_id' => $customer->id]);

// using Laravel's Log facade
Log::info('Generating invoice for customer', ['customer_id' => $customer->id]);
```

### Eigenständiger Logger

Mit dem eigenständigen Logger können Sie die Severity-Stufe Ihrer Logs definieren:

```php PHP theme={null}
use Appsignal\Appsignal;
use Appsignal\Severity;

// Different severity levels
Appsignal::log(
	message: "Something's gone terribly wrong here",
	severity: Severity::WARN,
);

Appsignal::log(
	message: 'User action completed successfully',
	severity: Severity::INFO,
);

Appsignal::log(
	message: 'Database connection failed',
	severity: Severity::ERROR,
);
```

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

```php PHP theme={null}
use Appsignal\Appsignal;
use Appsignal\Severity;

function processInvoice($customer) {
	Appsignal::log(
		message: 'Generating invoice for customer',
		severity: Severity::INFO,
		attributes: ['customer_id' => $customer->id],
	);
}
```

## Logs filtern

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.

### Strukturiertes Logging

AppSignal unterstützt strukturiertes Logging von Haus aus. Sie können strukturierte Daten als Log-Attribute senden:

```php PHP theme={null}
use Appsignal\Appsignal;
use Appsignal\Severity;

Appsignal::log(
	message: 'User action completed',
	severity: Severity::INFO,
    attributes: [
		'user_id' => $userId,
		'action' => 'purchase',
		'product_id' => $productId,
		'amount' => $amount,
		'currency' => 'USD'
	],
);

// or using Monolog
$logger->info('Generating invoice for customer', ['customer_id' => $customer->id]);

// or using Laravel's Log facade
Log::info('Generating invoice for customer', ['customer_id' => $customer->id]);
```

<Note>
  Sie können AppSignal for PHP auch so konfigurieren, dass bestimmte Log-Zeilen ignoriert werden, indem Sie [die Option `ignore_logs`](/php/configuration#option-ignore_logs) verwenden. Lesen Sie [unseren Leitfaden zum Ignorieren von Logs](/guides/filter-data/ignore-logs), um mehr zu erfahren.
</Note>

## Brauchen Sie Hilfe?

Nachdem Sie Ihre PHP-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!
