89 lines
2.3 KiB
Perl
89 lines
2.3 KiB
Perl
# Copyrights 2007-2021 by [Mark Overmeer <markov@cpan.org>].
|
|
# For other contributors see ChangeLog.
|
|
# See the manual pages for details on the licensing terms.
|
|
# Pod stripped from pm file by OODoc 2.02.
|
|
# This code is part of distribution Log-Report. Meta-POD processed with
|
|
# OODoc into POD and HTML manual-pages. See README.md
|
|
# Copyright Mark Overmeer. Licensed under the same terms as Perl itself.
|
|
|
|
package Dancer2::Logger::LogReport;
|
|
use vars '$VERSION';
|
|
$VERSION = '1.31';
|
|
|
|
# ABSTRACT: Dancer2 logger engine for Log::Report
|
|
|
|
use strict;
|
|
use warnings;
|
|
|
|
use Moo;
|
|
use Dancer2::Core::Types;
|
|
use Scalar::Util qw/blessed/;
|
|
use Log::Report 'log-report', syntax => 'REPORT';
|
|
|
|
our $AUTHORITY = 'cpan:MARKOV';
|
|
|
|
my %level_dancer2lr =
|
|
( core => 'TRACE'
|
|
, debug => 'TRACE'
|
|
);
|
|
|
|
with 'Dancer2::Core::Role::Logger';
|
|
|
|
# Set by calling function
|
|
has dispatchers =>
|
|
( is => 'ro'
|
|
, isa => Maybe[HashRef]
|
|
);
|
|
|
|
sub BUILD
|
|
{ my $self = shift;
|
|
my $configs = $self->dispatchers || {default => undef};
|
|
$self->{use} = [keys %$configs];
|
|
|
|
dispatcher 'do-not-reopen';
|
|
|
|
foreach my $name (keys %$configs)
|
|
{ my $config = $configs->{$name} || {};
|
|
if(keys %$config)
|
|
{ my $type = delete $config->{type}
|
|
or die "dispatcher configuration $name without type";
|
|
|
|
dispatcher $type, $name, %$config;
|
|
}
|
|
}
|
|
}
|
|
|
|
around 'error' => sub {
|
|
my ($orig, $self) = (shift, shift);
|
|
|
|
# If it's a route exception (generated by Dancer) and we're also using the
|
|
# Plugin, then the plugin will handle the exception using its own hook into
|
|
# the error system. This should be able to removed in the future with
|
|
# https://github.com/PerlDancer/Dancer2/pull/1287
|
|
return if $_[0] =~ /^Route exception/
|
|
&& $INC{'Dancer2/Plugin/LogReport.pm'};
|
|
|
|
$self->log(error => @_);
|
|
};
|
|
|
|
|
|
sub log # no protoypes in Dancer2
|
|
{ my ($self, $level, $msg) = @_;
|
|
|
|
my %options;
|
|
# If only using the logger on its own (without the associated plugin), make
|
|
# it behave like a normal Dancer logger
|
|
unless ($INC{'Dancer2/Plugin/LogReport.pm'})
|
|
{ $msg = $self->format_message($level, $msg);
|
|
$options{is_fatal} = 0;
|
|
}
|
|
|
|
# the levels are nearly the same.
|
|
my $reason = $level_dancer2lr{$level} || uc $level;
|
|
|
|
report \%options, $reason => $msg;
|
|
undef;
|
|
}
|
|
|
|
1;
|