Revision history for Log-Contextual
+ - Add Log::Contextual::Easy for simple LC usage (Jakob Voß)
+
0.005005 2013-08-08
- Fix minimum version of Exporter::Declare
=head2 -logger
When you import this module you may use C<-logger> as a shortcut for
-L<set_logger>, for example:
+L</set_logger>, for example:
use Log::Contextual::SimpleLogger;
use Log::Contextual qw( :dlog ),
sub default_import { qw(:dlog :log ) }
+See L<Log::Contextual::Easy::Default> for an example of a subclass of
+C<Log::Contextual> that makes use of default import options.
+
=head1 FUNCTIONS
=head2 set_logger
=head1 CONTRIBUTORS
+=encoding utf8
+
triddle - Tyler Riddle <t.riddle@shadowcat.co.uk>
+voj - Jakob Voß <voss@gbv.de>
+
=head1 DESIGNER
mst - Matt S. Trout <mst@shadowcat.co.uk>
--- /dev/null
+package Log::Contextual::Easy;
+
+use base 'Log::Contextual';
+
+sub arg_default_logger {
+ if ($_[1]) {
+ return $_[1];
+ } else {
+ require Log::Contextual::WarnLogger;
+ my $package = uc(caller(3));
+ $package =~ s/::/_/g;
+ return Log::Contextual::WarnLogger->new({env_prefix => $package});
+ }
+}
+
+sub default_import { qw(:dlog :log ) }
+
+1;
+
+__END__
+
+=head1 NAME
+
+Log::Contextual::Easy - Import all logging methods with WarnLogger as default
+
+=head1 SYNOPSIS
+
+In your module:
+
+ package My::Module;
+ use Log::Contextual::Easy;
+
+ log_debug { "your message" };
+ Dlog_trace { $_ } @vars;
+
+In your program:
+
+ use My::Module;
+
+ # enable warnings
+ $ENV{MY_MODULE_UPTO}="TRACE";
+
+ # or use a specific logger with set_logger / with_logger
+
+=head1 DESCRIPTION
+
+By default, this module enables a L<Log::Contextual::WarnLogger>
+with C<env_prefix> based on the module's name that uses
+Log::Contextual::Easy. The logging levels are set to C<trace> C<debug>,
+C<info>, C<warn>, C<error>, and C<fatal> (in this order) and all
+logging functions (L<log_...|Log::Contextual/"log_$level">,
+L<logS_...|Log::Contextual/"logS_$level">,
+L<Dlog_...|Log::Contextual/"Dlog_$level">, and
+L<Dlog...|Log::Contextual/"DlogS_$level">) are exported.
+
+=head1 SEE ALSO
+
+=over 4
+
+=item L<Log::Contextual>
+
+=back
--- /dev/null
+use strict;
+use warnings;
+
+use Test::More;
+
+use lib 't/lib';
+use My::Module; # makes use of Log::Contextual::Easy;
+
+# capture logging messages of My::Module, mapping "[...] xxx" to "...$sep"
+sub logshort($$) {
+ my ($cap, $sep) = @_;
+ sub {
+ local $_ = shift;
+ s/^\[(.+)\] (xxx|"xxx")\n$/$1$sep/;
+ $$cap .= $_;
+ }
+}
+
+# capture warnings
+my ($cap_warn, $cap_with, $cap_set);
+local $SIG{__WARN__} = logshort \$cap_warn, '!';
+
+{
+ My::Module::log();
+ is($cap_warn, undef, 'no logging by default');
+}
+
+{
+ local $ENV{MY_MODULE_UPTO} = 'info';
+ My::Module::log();
+ is($cap_warn, "info!warn!error!fatal!", 'WarnLogger enabled via ENV');
+ $cap_warn = '';
+}
+
+{
+ use Log::Contextual::SimpleLogger;
+ use Log::Contextual qw(with_logger set_logger);
+
+ set_logger( Log::Contextual::SimpleLogger->new({
+ levels => [qw(info warn error)],
+ coderef => logshort \$cap_set, '/'
+ }) );
+
+ my $with_logger = Log::Contextual::SimpleLogger->new({
+ levels => [qw(trace info fatal)],
+ coderef => logshort \$cap_with, '|'
+ });
+
+ with_logger $with_logger => sub {
+ My::Module::log();
+ };
+ is($cap_with, 'trace|info|fatal|', 'with_logger');
+
+ My::Module::log();
+ is($cap_set, 'info/warn/error/', 'set_logger');
+
+ is($cap_warn, '', 'no warnings if with_logger or set_logger');
+}
+
+done_testing;
+
+
--- /dev/null
+package My::Module;
+use Log::Contextual::Easy;
+
+sub log {
+ Dlog_fatal { $_ }
+ DlogS_error { $_ }
+ logS_warn { $_[0] }
+ logS_info { $_[0] }
+ log_debug { $_[0] }
+ log_trace { $_[0] } 'xxx';
+}
+
+1;