Skip to content

PHP Configuration ​

Complete configuration reference for the PHP SDK.

Configuration Methods ​

Constructor Options ​

php
$client = new Client([
    'transporter' => 'file',
    'storagePath' => '/var/log/nadi',
    // ... other options
]);

Configuration File ​

Create a nadi.php config file:

php
<?php
// config/nadi.php
return [
    'transporter' => 'file',
    'storagePath' => '/var/log/nadi',
    'environment' => getenv('APP_ENV') ?: 'production',
    // ...
];

Load it:

php
$config = require 'config/nadi.php';
$client = new Client($config);

Configuration Reference ​

Required Options ​

OptionTypeDescription
transporterstringTransport method: file (recommended) or http
storagePathstringLog directory path (for file transporter)

TIP

apiKey and appKey are only required when using the http transporter. For the recommended file transporter, credentials are configured in nadi.yaml for the Shipper agent.

Core Options ​

php
[
    // Application environment (production, staging, development)
    'environment' => 'production',

    // Application release/version identifier
    'release' => 'v1.2.3',

    // Enable/disable error reporting
    'enabled' => true,

    // Server/application name
    'serverName' => gethostname(),
]

Transporter Options ​

php
[
    // Transport method: 'file' or 'http'
    'transporter' => 'file',

    // File transporter settings
    'storagePath' => '/var/log/nadi',

    // HTTP transporter settings
    'endpoint' => 'https://nadi.pro/api/',
    'timeout' => 5, // seconds
]

Sampling Options ​

php
[
    // Sampling strategy: fixed_rate, dynamic_rate, interval, peak_load
    'samplingStrategy' => 'fixed_rate',

    // Fixed rate: percentage of events to capture (0.0 - 1.0)
    'samplingRate' => 1.0,

    // Dynamic rate settings
    'samplingBaseRate' => 0.05,
    'samplingLoadFactor' => 1.0,

    // Interval settings
    'samplingIntervalSeconds' => 60,
]

Context Options ​

php
[
    // Default tags for all events
    'tags' => [
        'server' => gethostname(),
        'datacenter' => 'us-east-1',
    ],

    // Default extra data for all events
    'extra' => [
        'app_version' => APP_VERSION,
    ],
]

Filtering Options ​

php
[
    // Fields to scrub from captured data
    'scrubFields' => [
        'password',
        'password_confirmation',
        'secret',
        'token',
        'api_key',
        'credit_card',
        'cvv',
    ],

    // Headers to exclude
    'scrubHeaders' => [
        'Authorization',
        'Cookie',
        'X-API-Key',
    ],

    // Exception classes to ignore
    'dontReport' => [
        'InvalidArgumentException',
        'RuntimeException',
    ],
]

Stack Trace Options ​

php
[
    // Maximum stack frames to capture
    'maxStackFrames' => 50,

    // Paths to mark as "in app" (your code)
    'inAppInclude' => [
        '/var/www/app',
    ],

    // Paths to exclude from "in app"
    'inAppExclude' => [
        '/var/www/vendor',
    ],
]

Request Capture Options ​

php
[
    // Capture request body
    'captureRequestBody' => true,

    // Maximum request body size (bytes)
    'maxRequestBodySize' => 10240,

    // Capture session data
    'captureSession' => true,

    // Capture cookies
    'captureCookies' => false,
]

Error Handler Options ​

php
[
    // PHP error types to capture
    'errorTypes' => E_ALL,

    // Fatal error types
    'fatalErrorTypes' => E_ERROR | E_PARSE | E_CORE_ERROR | E_COMPILE_ERROR,

    // Convert errors to exceptions
    'convertErrorsToExceptions' => true,
]

Complete Example ​

php
<?php

use Nadi\Client;

$client = new Client([
    // Transporter (recommended: file + Shipper)
    'transporter' => 'file',
    'storagePath' => '/var/log/nadi',

    // Environment
    'environment' => getenv('APP_ENV') ?: 'production',
    'release' => getenv('APP_VERSION') ?: '1.0.0',
    'serverName' => gethostname(),
    'enabled' => true,

    // Sampling
    'samplingStrategy' => 'fixed_rate',
    'samplingRate' => 1.0,

    // Context
    'tags' => [
        'datacenter' => 'us-east-1',
    ],

    // Filtering
    'scrubFields' => [
        'password',
        'credit_card',
        'cvv',
    ],
    'dontReport' => [
        'ValidationException',
    ],

    // Stack Trace
    'maxStackFrames' => 50,
    'inAppInclude' => [
        '/var/www/app/src',
    ],
    'inAppExclude' => [
        '/var/www/app/vendor',
    ],

    // Request
    'captureRequestBody' => true,
    'maxRequestBodySize' => 10240,
]);

Environment-Specific Configuration ​

Development ​

php
$client = new Client([
    'transporter' => 'file',
    'storagePath' => '/var/log/nadi',
    'environment' => 'development',
    'samplingRate' => 1.0,
    'captureRequestBody' => true,
]);

Production ​

php
$client = new Client([
    'transporter' => 'file',
    'storagePath' => '/var/log/nadi',
    'environment' => 'production',
    'samplingRate' => 0.1,
    'captureRequestBody' => false,
    'dontReport' => [
        'ValidationException',
        'NotFoundException',
    ],
]);

Runtime Configuration ​

Modify configuration at runtime:

php
// Enable/disable
$client->setEnabled(false);

// Change sampling
$client->setSamplingRate(0.5);

// Add tags
$client->setTag('feature', 'checkout');

// Add to scrub list
$client->addScrubField('custom_secret');

Validation ​

Validate your configuration:

php
try {
    $client = new Client($config);
    $client->validateConfig();
} catch (InvalidConfigException $e) {
    echo "Configuration error: " . $e->getMessage();
}

Next Steps ​

Released under the MIT License.