package App::LogAnyAdapter;
# from ChatGPT session - see documents/LAA-ChatGPT.txt
use 5.34.0;
# this is from ChatGPPT session but function works OK without it:
# use Dancer2 (); # load but don’t import the DSL
use Log::Any::Adapter;
use Data::Printer;
use App::Class;
=begin # passing log-level from D2 app now
my %level_for = (
development => 'debug',
production => 'warning',
test => 'info',
);
my $env = Dancer2->runner->environment; warn "env:$env";
my $log_level = $level_for{$env}; warn "min_log_level:$min_log_level";
=cut
# Log::Any does not recognise 'core' as valid setting, trace is 'lowest':
my %level_for = ( core => 'trace' );
sub init { # warn $log_level;
# Get the first registered app (single-app setup):
my ($app) = @{ Dancer2->runner->apps };
my $cfg = $app->config; # p $cfg
my $log_level = $cfg->{log}; # warn $log_level;
my $min_level = $level_for{$log_level} || $log_level; # warn $min_level;
=begin # Callback is deprecated, use Capture instead (below)
Log::Any::Adapter->set(
Callback => (
min_level => $min_level,
logging_cb => sub ($method, $self, $str, @params) {
# $method = 'debug', 'info' etc; $self = Log::Any::Adapter::Callback obj
# $str = message passed from caller; @params = ???
my $msg = @params ? sprintf($str, @params) : $str;
# Skip Log::Any frames so the caller is your model code - no it isn't
my (undef, $file, $line) = caller(2); warn $file; warn $line; # caller is Route not Model
my $msg_str = _add_caller_to_msg( $msg, $file, $line );
$app->logger_engine->log(
$method => $msg_str,
caller => [$file, $line],
);
},
),
);
=cut
#=begin # Capture method
Log::Any::Adapter->set(
Capture => (
format => 'messages',
to => sub ( $level, $category, $message_text ) { # warn 'x' x 30;
# warn $level; warn $category; warn $message_text;
# Skip Log::Any frames so the caller is your model code - no it isn't:
my (undef, $file, $line) = caller(2);
# add caller info to message:
my $msg = _add_caller_to_msg( $message_text, $file, $line );
$app->logger_engine->log(
$level => $msg,
caller => [$file, $line], # <= this is ignored !!!
);
},
log_level => $min_level,
),
);
#=cut
}
sub _add_caller_to_msg ( $message_text, $file, $line ) {
my $caller = join '::', ( split '/', $file )[-2, -1]; # p $caller; # last 2 elements
$message_text .= sprintf ' [%s:#%s]', $caller, $line; # warn $message_text;
return $message_text;
}
1;