Skip to content
Search

DSL References

DSL stands for Domain Specific Language. In Flow, the DSL is a set of small functions that wrap object construction so pipelines read top-to-bottom. See the examples for usage in context.

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, ErrorHandler $errorHandler) : 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

Built in the open.

Join us on GitHub
scroll back to top