OpenTelemetry
view release on metacpan or search on metacpan
lib/Log/Any/Adapter/OpenTelemetry.pm view on Meta::CPAN
package Log::Any::Adapter::OpenTelemetry;
use strict;
use warnings;
use experimental 'signatures';
our $VERSION = '0.033';
use Log::Any::Adapter::Util ();
use OpenTelemetry qw( otel_config otel_span_from_context otel_logger_provider );
use Ref::Util 'is_hashref';
use Time::HiRes 'time';
use OpenTelemetry::Constants qw(
LOG_LEVEL_TRACE
LOG_LEVEL_DEBUG
LOG_LEVEL_INFO
LOG_LEVEL_WARN
LOG_LEVEL_ERROR
LOG_LEVEL_FATAL
);
use base 'Log::Any::Adapter::Base';
my %LOG2OTEL = (
trace => LOG_LEVEL_TRACE,
debug => LOG_LEVEL_DEBUG,
info => LOG_LEVEL_INFO,
warn => LOG_LEVEL_WARN,
error => LOG_LEVEL_ERROR,
fatal => LOG_LEVEL_FATAL,
);
my %OTEL2LOG = (
trace => 8,
debug => 7,
info => 6,
warn => 4,
error => 3,
fatal => 2,
);
sub init ( $self, @ ) {
# FIXME: It would be good to get a logger early and cache
# it for eventual calls. However, this suffers from the same
# issue with caching tracers that is documented in the POD
# for OpenTelemetry::Trace::Tracer: namely, that if we get
# the no-op logger before we've set up a real logger provider
# that can generate real loggers, we'll be stuck with a no-op.
# It might be that we need to revisit the proxy classes removed
# in d9e321bd1bf65d510b12ef34fe2b5a0c51da0bf2, although the
# rationale for why they were removed is still sound. We'd just
# have to come up with a way to make sure its delegate continues
# to point to the right place even if the tracer provider changes
# $self->{logger} = otel_logger_provider->logger;
}
for my $method ( Log::Any::Adapter::Util::logging_methods() ) {
no strict 'refs';
*$method = sub ( $self, @args) {
$self->structured( $method, $self->category, @args );
};
}
for my $method ( Log::Any::Adapter::Util::detection_methods() ) {
my $numeric = Log::Any::Adapter::Util::numeric_level( $method =~ s/^is_//r );
no strict 'refs';
*$method = sub {
my $level = $OTEL2LOG{ lc( otel_config('LOG_LEVEL') // 'info' ) };
$numeric <= ( $level // $OTEL2LOG{info} );
( run in 2.194 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )