Вы не предоставляете достаточно информации для диагностики вашей проблемы (например, что такое метод :: Делегирование и как оно связано с Log4perl), но мои здравые чувства говорят мне, что у вас, вероятно, есть метод обертки, из которого вы вызываете Методы Log4perl. Вы должны увеличить значение $Log::Log4perl::caller_depth
из этой оболочки (и уменьшить ее после вызова в Log4perl), чтобы определить правильное местоположение.
например. в Moose, я использую:
package MyApp::Role::Log;
use MooseX::Role::Strict;
use Log::Log4perl;
my @methods = qw(
log trace debug info warn error fatal
is_trace is_debug is_info is_warn is_error is_fatal
logexit logwarn error_warn logdie error_die
logcarp logcluck logcroak logconfess
);
has '_logger' => (
is => 'ro',
isa => 'Log::Log4perl::Logger',
lazy_build => 1,
handles => \@methods,
);
around $_ => sub {
my $orig = shift;
my $this = shift;
# one level for this method itself
# two levels for Class::MOP::Method::Wrapped (the "around" wrapper)
# one level for Moose::Meta::Method::Delegation (the "handles" wrapper)
local $Log::Log4perl::caller_depth += 4;
my $return = $this->$orig(@_);
$Log::Log4perl::caller_depth -= 4;
return $return;
} foreach @methods;
sub _build__logger
{
my $this = shift;
Log::Log4perl->easy_init() if not Log::Log4perl::initialized();
return Log::Log4perl->get_logger(ref $this)
}
no MooseX::Role::Strict;
1;
Обратите внимание, что модуль CPAN MooseX::Log::Log4perl не увеличивает caller_depth, что он определенно должен.
Doh! Извините, вы правы. Забыл упомянуть, что мой класс написан с Мусом. – user269820
Ха, ну тогда мой пример должен быть на месте тогда :) – Ether