The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Catalyst::Plugin::ErrorCatcher - Catch application errors and emit them somewhere

SYNOPSIS

  use Catalyst qw/-Debug StackTrace ErrorCatcher/;

DESCRIPTION

This plugin allows you to do More Stuff with the information that would normally only be seen on the Catalyst Error Screen courtesy of the Catalyst::Plugin::StackTrace plugin.

CONFIGURATION

The plugin is configured in a similar manner to other Catalyst plugins:

  <Plugin::ErrorCatcher>
    enabled     1
    context     5

    emit_module A::Module
  </Plugin::ErrorCatcher>
enabled

Setting this to true forces the module to work its voodoo.

It's also enabled if the value is unset and you're running Catalyst in debug-mode.

context

When there is stack-trace information to share, how many lines of context to show around the line that caused the error.

emit_module

This specifies which module to use for custom output behaviour.

You can chain multiple modules by specifying a line in the config for each module you'd like used:

    emit_module A::Module
    emit_module Another::Module
    emit_module Yet::Another::Module

If none are specified, or all that are specified fail, the default behaviour is to log the prepared message at the INFO level via $c->log().

For details on how to implement a custom emitter see "CUSTOM EMIT CLASSES" in this documentation.

PROVIDED EMIT CLASSES

Catalyst::Plugin::ErrorCatcher::Email

This module uses MIME::Lite to send the prepared output to a specified email address.

See Catalyst::Plugin::ErrorCatcher::Email for usage and configuration details.

CUSTOM EMIT CLASSES

A custom emit class takes the following format:

  package A::Module;
  # vim: ts=8 sts=4 et sw=4 sr sta
  use strict;
  use warnings;
  
  sub emit {
    my ($class, $c, $output) = @_;
  
    $c->log->info(
      'IGNORING OUTPUT FROM Catalyst::Plugin::ErrorCatcher'
    );
  
    return;
  }
  
  1;
  __END__

The only requirement is that you have a sub called emit.

Catalyst::Plugin::ErrorCatcher passes the following parameters in the call to emit():

$class

The package name

$c

A Context object

$output

The processed output from Catalyst::Plugin::ErrorCatcher

If you want to use the original error message you should use:

  my @error = @{ $c->error };

You may use and abuse any Catalyst methods, or other Perl modules as you see fit.

KNOWN ISSUES

The test-suite coverage is quite low.

SEE ALSO

Catalyst, Catalyst::Plugin::StackTrace

AUTHORS

Chisel Wright <chisel@herlpacker.co.uk>

THANKS

The authors of Catalyst::Plugin::StackTrace, from which a lot of code was used.

Ash Berlin for guiding me in the right direction after a known hacky first implementation.

COPYRIGHT

This program is free software, you can redistribute it and/or modify it under the same terms as Perl itself.