On 15/10/12 15:21 Alexander Hartmaier wrote: > I recommend to use a logging module like Log::Log4perl::Catalyst and do > all your app logging there.
I use Log::Dispatch. (The application is already deployed, and it's not feasible to change it to Log4perl now.) I don't see where in your code you trap calls to $c->error() and log them. > My log package for NAC::Web:NAC looks like this: > > package NAC::Web::NAC::Log; > use Moose; > use Catalyst::Log; > use namespace::autoclean; > > BEGIN { extends 'Log::Log4perl::Catalyst'; } > > =head1 NAME > > NAC::Web::NAC::Log - Logger for NAC::Web::NAC > > =cut > > # import _dump method from Catalyst::Log > *_dump = \&Catalyst::Log::_dump; > > 1; > > My app uses it with: > > =item finalize_config > > Initializes the logger after the config file merging and loading is done. > > =cut > > sub finalize_config { > my $class = shift; > $class->next::method(@_); > $class->log(NAC::Web::NAC::Log->new($class->config->{log})); > } > > # Start the application > __PACKAGE__->setup(); > > around 'prepare' => sub { > my $orig = shift; > my $self = shift; > > Log::Log4perl::MDC->remove(); > > my $c = $self->$orig(@_); > > Log::Log4perl::MDC->put( "username", $c->user->username ) > if $c->user_exists; > > return $c; > }; > > And this is how the app's prod config file looks like: > > <log> > log4perl.logger "WARN, FILE, MAIL" > log4perl.appender.FILE > "Log::Log4perl::Appender::File" > log4perl.appender.FILE.filename > "/home/nac/log/nac-web-nac.log" > log4perl.appender.FILE.utf8 1 > log4perl.appender.FILE.syswrite 1 > log4perl.appender.FILE.layout > "Log::Log4perl::Layout::PatternLayout" > log4perl.appender.FILE.layout.ConversionPattern "%d{yyyy-MM-dd > HH:mm:ss} %-5p %X{username} %m%n" > log4perl.appender.MAIL > "Log::Dispatch::Email::MailSend" > log4perl.appender.MAIL.Threshold ERROR > log4perl.appender.MAIL.from "n...@domain.com" > log4perl.appender.MAIL.to > "app-err...@domain.com" > log4perl.appender.MAIL.subject "[NAC::Web::NAC] > errors" > log4perl.appender.MAIL.buffered 0 > log4perl.appender.MAIL.layout "PatternLayout" > log4perl.appender.MAIL.layout.ConversionPattern "%d{yyyy-MM-dd > HH:mm:ss} %-5p %X{username} %m%n" > </log> > > Best regards, Alex (abraxxa) > > On 2012-10-11 14:38, Robert Rothenberg wrote: >> I would like to trap every error added to $c->error() and log it, noting the >> caller (filename, line number) in the logs. >> >> I've not gotten Catalyst::Plugin::ErrorCatcher to work, so I wrote my own >> plugin that overrides $c->error with the following method: >> >> use MRO::Compat; >> use namespace::autoclean; >> >> sub error { >> my ($c, @args) = @_; >> >> foreach my $arg (@args) { >> if ($arg) { >> >> $c->log->error($arg); >> } >> } >> >> return $c->next::method(@args); >> } >> >> But this only logs errors as coming from my plugin. >> >> Using Sub::Uplevel or fiddling with $Log::Dispatch::CallerDepth or >> $Catalyst::Plugin::Log::Dispatch::CallerDepth doesn't seem to work. >> >> I also tried writing the plugin as a Moose::Role that adds my trap before >> error, but then it claims to be from one of the internal Moose classes in my >> logs. >> >> I can manually get the caller using caller(0) and add them to the log >> messages, but that's a bit clumsy (and overrides log formats that don't >> include the information). >> >> So... what is the best practice for trapping errors in a way that preserves >> caller information? >> >> >> _______________________________________________ >> List: Catalyst@lists.scsys.co.uk >> Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst >> Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/ >> Dev site: http://dev.catalyst.perl.org/ > > > > *"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"* > T-Systems Austria GesmbH Rennweg 97-99, 1030 Wien > Handelsgericht Wien, FN 79340b > *"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"* > Notice: This e-mail contains information that is confidential and may be > privileged. > If you are not the intended recipient, please notify the sender and then > delete this e-mail immediately. > *"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"* > > _______________________________________________ > List: Catalyst@lists.scsys.co.uk > Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst > Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/ > Dev site: http://dev.catalyst.perl.org/ _______________________________________________ List: Catalyst@lists.scsys.co.uk Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/ Dev site: http://dev.catalyst.perl.org/