Re: [Catalyst] Trapping added errors with the correct caller
On 2012-10-16 00:04, Kieren Diment wrote: I've had a lot of luck with Log::Contextual recently. It's nice for easily getting logging into model classes. I'm going to use Log::Any for that in the future. On 16/10/2012, at 1:21 AM, Alexander Hartmaier wrote: I recommend to use a logging module like Log::Log4perl::Catalyst and do all your app logging there. 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{-MM-dd HH:mm:ss} %-5p %X{username} %m%n log4perl.appender.MAIL Log::Dispatch::Email::MailSend log4perl.appender.MAIL.ThresholdERROR 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{-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/ ___ List: Catalyst@lists.scsys.co.uk Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst Searchable archive:
Re: [Catalyst] Trapping added errors with the correct caller
On 2012-10-15 18:55, Robert Rothenberg wrote: On 15/10/12 17:49 Alexander Hartmaier wrote: On 2012-10-15 18:03, Robert Rothenberg wrote: 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.) If you're already using a logger but the default Catalyst one that's fine. I don't see where in your code you trap calls to $c-error() and log them. All log messages are going to your logger object, Log::Dispatch in your case, not just errors. Just configure Log::Dispatch to do with them what you want it to do (log to a separate file, mail them, etc. ). You don't seem to understand my original question. The end method of the Root controller looks for errors in $c-error() and logs them, then displays a custom error page. The problem with doing that is that it does not say where the error occurred. So I want to modify $c-error() to log it every time something is added, which is actually quite easy. But I want to use something like Sub::Uplevel so that the logger does not say the wrapper module triggered the error. You mean *your* end action code? You haven't showed it and my crystal ball is broken. Does it make a difference for you if the error is logged when it occurred instead of the end of the request? My apps normally die on the first error which gets logged. The die error message includes the filename and line number which is sufficient for me. *** 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/
Re: [Catalyst] Trapping added errors with the correct caller
I recommend to use a logging module like Log::Log4perl::Catalyst and do all your app logging there. 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{-MM-dd HH:mm:ss} %-5p %X{username} %m%n log4perl.appender.MAIL Log::Dispatch::Email::MailSend log4perl.appender.MAIL.ThresholdERROR 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{-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/
Re: [Catalyst] Trapping added errors with the correct caller
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{-MM-dd HH:mm:ss} %-5p %X{username} %m%n log4perl.appender.MAIL Log::Dispatch::Email::MailSend log4perl.appender.MAIL.ThresholdERROR 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{-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/
Re: [Catalyst] Trapping added errors with the correct caller
On 2012-10-15 18:03, Robert Rothenberg wrote: 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.) If you're already using a logger but the default Catalyst one that's fine. I don't see where in your code you trap calls to $c-error() and log them. All log messages are going to your logger object, Log::Dispatch in your case, not just errors. Just configure Log::Dispatch to do with them what you want it to do (log to a separate file, mail them, etc. ). 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{-MM-dd HH:mm:ss} %-5p %X{username} %m%n log4perl.appender.MAIL Log::Dispatch::Email::MailSend log4perl.appender.MAIL.ThresholdERROR 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{-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:
Re: [Catalyst] Trapping added errors with the correct caller
On 15/10/12 17:49 Alexander Hartmaier wrote: On 2012-10-15 18:03, Robert Rothenberg wrote: 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.) If you're already using a logger but the default Catalyst one that's fine. I don't see where in your code you trap calls to $c-error() and log them. All log messages are going to your logger object, Log::Dispatch in your case, not just errors. Just configure Log::Dispatch to do with them what you want it to do (log to a separate file, mail them, etc. ). You don't seem to understand my original question. The end method of the Root controller looks for errors in $c-error() and logs them, then displays a custom error page. The problem with doing that is that it does not say where the error occurred. So I want to modify $c-error() to log it every time something is added, which is actually quite easy. But I want to use something like Sub::Uplevel so that the logger does not say the wrapper module triggered the error. ___ 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/
Re: [Catalyst] Trapping added errors with the correct caller
I've had a lot of luck with Log::Contextual recently. It's nice for easily getting logging into model classes. On 16/10/2012, at 1:21 AM, Alexander Hartmaier wrote: I recommend to use a logging module like Log::Log4perl::Catalyst and do all your app logging there. 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{-MM-dd HH:mm:ss} %-5p %X{username} %m%n log4perl.appender.MAIL Log::Dispatch::Email::MailSend log4perl.appender.MAIL.ThresholdERROR 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{-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/
Re: [Catalyst] Trapping added errors with the correct caller
On Thu, Oct 11, 2012 at 5:38 AM, Robert Rothenberg rob...@gmail.com 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); } } Isn't that what finalize already does? I have a very old and out-dated plugin I use that wraps execute() and sets __DIE__ and __WARN__ to catch those and uses Devel::StackTrace to add in a stack trace. Then I use log4perl to format and direct the messages. I also use Moose's Throwable which includes a stack trace. -- Bill Moseley mose...@hank.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/
Re: [Catalyst] Trapping added errors with the correct caller
On Thu, Oct 11, 2012 at 1:38 PM, Robert Rothenberg rob...@gmail.com 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 I don't think Catalyst::Plugin::ErrorCatcher is quite what you need for your requirement. ErrorCatcher is basically ::Plugin::StackTrace with more options for where the stack-trace should go (and some support for you to create more destinations/behaviours). It prepares (ok, munges in weird and wonderful ways) the output you would see in the stacktrace plugin, and passes it on to pluggable modules for them to 'emit' the prepared messages as they see fit. It doesn't interact with $c-error() directly as far as I can remember. -- Chisel e: chi...@chizography.net w: http://chizography.net ___ 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/
Re: [Catalyst] Trapping added errors with the correct caller
On 11/10/12 14:16 Bill Moseley wrote: On Thu, Oct 11, 2012 at 5:38 AM, Robert Rothenberg rob...@gmail.com mailto:rob...@gmail.com 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); } } Isn't that what finalize already does? I am using a custom error page. More importantly: I also want to know where the error was triggered, hence my question about using Sub::Uplevel. ___ 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/