.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.29) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is turned on, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{ . if \nF \{ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "Plack::Middleware::LogErrors 3pm" .TH Plack::Middleware::LogErrors 3pm "2014-11-26" "perl v5.22.1" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" Plack::Middleware::LogErrors \- Map psgi.errors to psgix.logger or other logger .SH "VERSION" .IX Header "VERSION" version 0.002 .SH "SYNOPSIS" .IX Header "SYNOPSIS" Using a logger you have already configured (using Log::Dispatch as an example): .PP .Vb 3 \& use Log::Dispatch; \& my $logger = Log::Dispatch\->new; \& $logger\->add( Log::Dispatch::File\->new(...) ); \& \& builder { \& enable \*(AqLogDispatch\*(Aq, logger => $logger; \& enable \*(AqLogErrors\*(Aq; \& $app; \& } .Ve .PP Using an explicitly defined logger: .PP .Vb 7 \& builder { \& enable \*(AqLogErrors\*(Aq, logger => sub { \& my $args = shift; \& $logger\->log(%$args); \& }; \& $app; \& } .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" \&\f(CW\*(C`psgi.errors\*(C'\fR defaults to \f(CW\*(C`stderr\*(C'\fR in most backends, which results in content going somewhere unhelpful like the server console. .PP This middleware simply remaps the \f(CW\*(C`psgi.errors\*(C'\fR stream to the \&\f(CW\*(C`psgix.logger\*(C'\fR stream, or an explicit logger that you provide. .PP This is especially handy when used in combination with other middlewares such as Plack::Middleware::LogWarn (which diverts Perl warnings to \&\f(CW\*(C`psgi.errors\*(C'\fR); Plack::Middleware::HTTPExceptions (which diverts uncaught exceptions to \f(CW\*(C`psgi.errors\*(C'\fR); and Plack::Middleware::AccessLog, which defaults to \f(CW\*(C`psgi.errors\*(C'\fR when not passed a logger \*(-- which is also automatically applied via plackup (so if you provided no \f(CW\*(C`\-\-access\-log\*(C'\fR option indicating a filename, \f(CW\*(C`psgi.errors\*(C'\fR is used). .SH "CONFIGURATION" .IX Header "CONFIGURATION" .ie n .SS """logger""" .el .SS "\f(CWlogger\fP" .IX Subsection "logger" A code reference for logging messages, that conforms to the psgix.logger specification. If not provided, \f(CW\*(C`psgix.logger\*(C'\fR is used, or the application will generate an error at runtime if there is no such logger configured. .SH "SUPPORT" .IX Header "SUPPORT" Bugs may be submitted through the \s-1RT\s0 bug tracker (or bug\-Plack\-Middleware\-LogErrors@rt.cpan.org ). I am also usually active on irc, as 'ether' at \f(CW\*(C`irc.perl.org\*(C'\fR. .SH "SEE ALSO" .IX Header "SEE ALSO" .IP "\(bu" 4 PSGI::Extensions \- the definition of \f(CW\*(C`psgix.logger\*(C'\fR .IP "\(bu" 4 \&\*(L"The Error Stream\*(R" in \s-1PSGI\s0 \- the definition of \f(CW\*(C`psgi.errors\*(C'\fR .IP "\(bu" 4 Plack::Middleware::LogWarn \- maps warnings to \f(CW\*(C`psgi.errors\*(C'\fR .IP "\(bu" 4 Plack::Middleware::HTTPExceptions \- maps exceptions to \f(CW\*(C`psgi.errors\*(C'\fR .IP "\(bu" 4 Plack::Middleware::LogDispatch \- use a Log::Dispatch logger for \f(CW\*(C`psgix.logger\*(C'\fR .IP "\(bu" 4 Plack::Middleware::Log4perl \- use a Log::Log4perl logger for \f(CW\*(C`psgix.logger\*(C'\fR .IP "\(bu" 4 Plack::Middleware::SimpleLogger \- essentially the opposite of this module! .SH "AUTHOR" .IX Header "AUTHOR" Karen Etheridge .SH "COPYRIGHT AND LICENSE" .IX Header "COPYRIGHT AND LICENSE" This software is copyright (c) 2013 by Karen Etheridge. .PP This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.