flow php

DSL stands for Domain Specific Language. In the case of Flow, the DSL is used to define simple functions that can be used to transform data. Most of those functions are initializing a new instance of a class under the hood since Flow is fully object-oriented. Please look at the examples below to get a better understanding of how to use the DSL functions.

HELPER


/**
 * Create a LogRecordConverter for converting Monolog LogRecord to Telemetry LogRecord.
 *
 * The converter handles:
 * - Severity mapping from Monolog Level to Telemetry Severity
 * - Message body conversion
 * - Channel and level name as monolog.* attributes
 * - Context values as context.* attributes (Throwables use setException())
 * - Extra values as extra.* attributes
 *
 * @param null|SeverityMapper $severityMapper Custom severity mapper (defaults to standard mapping)
 * @param null|ValueNormalizer $valueNormalizer Custom value normalizer (defaults to standard normalizer)
 *
 * Example usage:
 * ```php
 * $converter = log_record_converter();
 * $telemetryRecord = $converter->convert($monologRecord);
 * ```
 *
 * Example with custom mapper:
 * ```php
 * $converter = log_record_converter(
 *     severityMapper: severity_mapper([
 *         Level::Debug->value => Severity::TRACE,
 *     ])
 * );
 * ```
 */
log_record_converter(?SeverityMapper $severityMapper, ?ValueNormalizer $valueNormalizer) : LogRecordConverter
/**
 * Create a SeverityMapper for mapping Monolog levels to Telemetry severities.
 *
 * @param null|array<int, Severity> $customMapping Optional custom mapping (Monolog Level value => Telemetry Severity)
 *
 * Example with default mapping:
 * ```php
 * $mapper = severity_mapper();
 * ```
 *
 * Example with custom mapping:
 * ```php
 * use Monolog\Level;
 * use Flow\Telemetry\Logger\Severity;
 *
 * $mapper = severity_mapper([
 *     Level::Debug->value => Severity::DEBUG,
 *     Level::Info->value => Severity::INFO,
 *     Level::Notice->value => Severity::WARN,  // Custom: NOTICE → WARN instead of INFO
 *     Level::Warning->value => Severity::WARN,
 *     Level::Error->value => Severity::ERROR,
 *     Level::Critical->value => Severity::FATAL,
 *     Level::Alert->value => Severity::FATAL,
 *     Level::Emergency->value => Severity::FATAL,
 * ]);
 * ```
 */
severity_mapper(?array $customMapping) : SeverityMapper
/**
 * Create a TelemetryHandler for forwarding Monolog logs to Flow Telemetry.
 *
 * @param Logger $logger The Flow Telemetry logger to forward logs to
 * @param LogRecordConverter $converter Converter to transform Monolog LogRecord to Telemetry LogRecord
 * @param Level $level The minimum logging level at which this handler will be triggered
 * @param bool $bubble Whether messages handled by this handler should bubble up to other handlers
 *
 * Example usage:
 * ```php
 * use Monolog\Logger as MonologLogger;
 * use function Flow\Bridge\Monolog\Telemetry\DSL\telemetry_handler;
 * use function Flow\Telemetry\DSL\telemetry;
 *
 * $telemetry = telemetry();
 * $logger = $telemetry->logger('my-app');
 *
 * $monolog = new MonologLogger('channel');
 * $monolog->pushHandler(telemetry_handler($logger));
 *
 * $monolog->info('User logged in', ['user_id' => 123]);
 * // → Forwarded to Flow Telemetry with INFO severity
 * ```
 *
 * Example with custom converter:
 * ```php
 * $converter = log_record_converter(
 *     severityMapper: severity_mapper([
 *         Level::Debug->value => Severity::TRACE,
 *     ])
 * );
 * $monolog->pushHandler(telemetry_handler($logger, $converter));
 * ```
 */
telemetry_handler(Logger $logger, LogRecordConverter $converter, Level $level, bool $bubble) : TelemetryHandler
/**
 * Create a ValueNormalizer for converting arbitrary PHP values to Telemetry attribute types.
 *
 * The normalizer handles:
 * - null → 'null' string
 * - scalars (string, int, float, bool) → unchanged
 * - DateTimeInterface → unchanged
 * - Throwable → unchanged
 * - arrays → recursively normalized
 * - objects with __toString() → string cast
 * - objects without __toString() → class name
 * - other types → get_debug_type() result
 *
 * Example usage:
 * ```php
 * $normalizer = value_normalizer();
 * $normalized = $normalizer->normalize($value);
 * ```
 */
value_normalizer() : ValueNormalizer

Contributors

Join us on GitHub external resource
scroll back to top