I have created an Exception class that consumes the Throwable Moo role. The Exception class is the base class of further classes like for example XML::Exception. This is an excerpt from the Exception class
has _logger => ( is => 'lazy', isa => InstanceOf[ 'Log::Any::Proxy' ], init_arg => undef );
sub BUILD {
my ( $self ) = @_;
$self->_logger->errorf( $self->message ) if $self->has_message;
return;
}
sub _build__logger {
my ( $self ) = @_;
return Log::Any->get_logger( category => blessed( $self ) );
}
As you can see errorf() is called in the BUILD() method.
What I want is to log at the place where the exception is raised.
I dislike that although I cannot clearly state why. First it works only for Log::Log4perl. Second who is responsible for the adjustment of the "caller depth"? Is it the producer or the consumer? Do we need an amendment of the Log::Any::Adapter interface so that "caller depth" information can be passed to any adapter whether he needs it or not?
I have created an Exception class that consumes the Throwable Moo role. The Exception class is the base class of further classes like for example XML::Exception. This is an excerpt from the Exception class
As you can see
errorf()
is called in theBUILD()
method.What I want is to log at the place where the exception is raised.
If my consumer is Log::Log4perl, I have to do some wrapper registration
I dislike that although I cannot clearly state why. First it works only for
Log::Log4perl
. Second who is responsible for the adjustment of the "caller depth"? Is it the producer or the consumer? Do we need an amendment of the Log::Any::Adapter interface so that "caller depth" information can be passed to any adapter whether he needs it or not?