> ## 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 vanuit 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" }
]}
/>

Deze documentatie beschrijft hoe u logging configureert met het AppSignal for PHP-pakket.

## Logging configureren

<Warning>
  🔐 Stuur geen <strong>Persoonlijk Identificeerbare Informatie (PII)</strong> naar AppSignal. Filter PII (bijv. namen, e-mailadressen) uit logs en gebruik in plaats daarvan een ID, hash of gepseudonimiseerde identificator. <br /> <br /> Voor **onder HIPAA vallende entiteiten** vindt u meer informatie over het ondertekenen van een Business Associate Agreement (BAA) in onze [documentatie over Business Add-Ons](/support/business-add-ons).
</Warning>

U hoeft geen logbron aan te maken om logs te versturen vanuit de AppSignal for PHP-integratie. Er wordt automatisch een "application"-logbron aangemaakt.

Het AppSignal for PHP-pakket gebruikt de logging-mogelijkheden van OpenTelemetry om logs naar AppSignal te sturen.

### Laravel

Als u het Laravel-framework gebruikt, stuurt het AppSignal for PHP-pakket uw logs automatisch naar AppSignal. U hoeft Monolog niet rechtstreeks te configureren.

### Symfony

Als u het Symfony-framework gebruikt, is de gemakkelijkste manier om logs naar AppSignal te sturen via de [`MonologBundle`](https://github.com/symfony/monolog-bundle).

Installeer het Monolog auto-instrumentation-pakket.

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

Voeg een servicedefinitie toe voor `'appsignal.monolog.handler'` die de klasse `Appsignal\Integrations\Monolog\Handler` gebruikt.

```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
```

Voeg `appsignal.monolog.handler` toe aan de Monolog handler-stack.

```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) is de meest populaire logging-bibliotheek voor PHP. U kunt Monolog direct gebruiken om logs naar AppSignal te sturen.

Installeer het Monolog auto-instrumentation-pakket.

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

Voeg vervolgens `Appsignal\Integrations\Monolog\Handler` toe aan de handler-stack van Monolog.

```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');
```

### Zelfstandig gebruik

U kunt ook logs versturen met de zelfstandige logger via de helper-methode `log` van de `Appsignal`-basisklasse. Deze methode vereist geen configuratie.

```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,
	],
);
```

Configureer Monolog met de OpenTelemetry-handler om logs naar AppSignal te sturen:

```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 versturen

### Monolog

Met Monolog kunt u de severity-niveau van uw logs definiëren:

```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');
```

U kunt aangepaste attributen definiëren om loginformatie te versturen die kan worden gebruikt bij het filteren en opvragen van logs:

```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]);
```

### Zelfstandige logger

Met de zelfstandige logger kunt u de severity-niveau van uw logs definiëren:

```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,
);
```

U kunt aangepaste attributen definiëren om loginformatie te versturen die kan worden gebruikt bij het filteren en opvragen van logs:

```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 filteren

U kunt op berichtinhoud en attribuutwaarden filteren en opvragen vanuit de [Log Management](/logging/log-management)-tool.

Eenmaal geconfigureerd, worden de gewenste attributen als log-tags naar AppSignal verstuurd en zijn ze opvraagbaar in de AppSignal logging-interface.

### Gestructureerde logging

AppSignal ondersteunt gestructureerde logging out of the box. U kunt gestructureerde data als log-attributen versturen:

```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>
  U kunt AppSignal for PHP ook configureren om specifieke logregels te negeren met behulp van [de optie `ignore_logs`](/php/configuration#option-ignore_logs). Zie [onze gids Logs negeren](/guides/filter-data/ignore-logs) voor meer informatie.
</Note>

## Hulp nodig?

Nadat u uw PHP-applicatie hebt geconfigureerd om logs te versturen, zouden er logs in AppSignal moeten verschijnen. Als u twijfelt over deze stap of AppSignal geen logs ontvangt, kunt u altijd [contact opnemen](mailto:support@appsignal.com) voor hulp. Wij helpen u graag weer op weg!
