From 15bce0aa2735643fc7eff33fa09e76a549cc7063 Mon Sep 17 00:00:00 2001 From: Kyle M Hall Date: Mon, 17 Sep 2012 11:53:05 -0400 Subject: [PATCH] Bug 8190 - Followup - Add cached logger, output messages to template Content-Type: text/plain; charset="utf-8" * Add C4::Context->logger * Embed logged messageds to a comment in the template html --- C4/Auth.pm | 2 + C4/Context.pm | 28 +++++ Koha/Utils/Logger.pm | 108 ++++++++++++-------- .../prog/en/includes/doc-head-open.inc | 3 + mainpage.pl | 2 + 5 files changed, 102 insertions(+), 41 deletions(-) diff --git a/C4/Auth.pm b/C4/Auth.pm index 59c9955..34c062a 100644 --- a/C4/Auth.pm +++ b/C4/Auth.pm @@ -461,6 +461,8 @@ sub get_template_and_user { $template->param(OpacPublic => '1') if ($user || C4::Context->preference("OpacPublic")); } + + $template->param(Logger => C4::Context->logger() ); return ( $template, $borrowernumber, $cookie, $flags); } diff --git a/C4/Context.pm b/C4/Context.pm index 9ce6c74..4c556a3 100644 --- a/C4/Context.pm +++ b/C4/Context.pm @@ -20,6 +20,8 @@ use strict; use warnings; use vars qw($VERSION $AUTOLOAD $context @context_stack $servers $memcached $ismemcached); +use Koha::Utils::Logger; + BEGIN { if ($ENV{'HTTP_USER_AGENT'}) { require CGI::Carp; @@ -1130,6 +1132,32 @@ sub tz { return $context->{tz}; } +=head2 logger + + $logger = C4::Context->logger; + +Returns a Koha logger. If no logger has yet been instantiated, +this method creates one, and caches it. + +=cut + +sub logger +{ + my $self = shift; + my $sth; + + if ( defined( $context->{"logger"} ) ) { + return $context->{"logger"}; + } + + $context->{"logger"} = Koha::Utils::Logger->new( + { + level => C4::Context->preference("LogLevel") + } + ); + + return $context->{"logger"}; +} 1; diff --git a/Koha/Utils/Logger.pm b/Koha/Utils/Logger.pm index 37b24de..fea850f 100644 --- a/Koha/Utils/Logger.pm +++ b/Koha/Utils/Logger.pm @@ -48,32 +48,40 @@ our $log = undef; sub new { my ( $proto, $params ) = @_; - return $log if $log and ( not defined $params->{file} or not defined $log->{FILE_PATH} or $params->{file} eq $log->{FILE_PATH} ); - my $class = ref($proto) || $proto; - my $self = {}; + return $log + if $log + and ( not defined $params->{file} + or not defined $log->{FILE_PATH} + or $params->{file} eq $log->{FILE_PATH} ); + my $class = ref($proto) || $proto; + my $self = {}; my $LOG_PATH = defined $ENV{KOHA_LOG} ? $ENV{KOHA_LOG} : undef; - $self->{FILE_PATH} = defined $params->{file} ? $params->{file} : $LOG_PATH; - $self->{LEVEL} = defined $params->{level} ? $params->{level} : $INFO_LOG_LEVEL; + $self->{FILE_PATH} = defined $params->{file} ? $params->{file} : $LOG_PATH; + $self->{LEVEL} = + defined $params->{level} ? $params->{level} : $INFO_LOG_LEVEL; + $self->{LOGGED_MESSAGES} = []; + if ( not defined $self->{FILE_PATH} ) { - return bless($self, $class); + return bless( $self, $class ); } eval { - $self->{LOGGER} = Log::LogLite->new($self->{FILE_PATH}, $self->{LEVEL}); + $self->{LOGGER} = + Log::LogLite->new( $self->{FILE_PATH}, $self->{LEVEL} ); }; die "Log system is not correctly configured ($@)" if $@; return bless( $self, $class ); } sub write { - my ($self, $msg, $log_level, $dump, $cb) = @_; + my ( $self, $msg, $log_level, $dump, $cb ) = @_; if ( not $self->{LOGGER} ) { - if($log_level <= $self->{LEVEL}) { - print STDERR "[" . localtime() . "] " - . "$LEVEL_STR->{$log_level}: " - . $msg - . ( $cb ? " (" . $cb . ")" : "" ) - . "\n"; + if ( $log_level <= $self->{LEVEL} ) { + print STDERR "[" + . localtime() . "] " + . "$LEVEL_STR->{$log_level}: " + . $msg + . ( $cb ? " (" . $cb . ")" : "" ) . "\n"; } return; } @@ -82,64 +90,72 @@ sub write { $template .= "\n"; $self->{LOGGER}->template($template); $msg = "\n" . Dumper $msg if $dump; - $self->{LOGGER}->write($msg, $log_level); + $self->{LOGGER}->write( $msg, $log_level ); + +if ( $log_level <= $self->{LEVEL} ) { + my $message = "[" + . localtime() . "] " + . "$LEVEL_STR->{$log_level}: " + . $msg + . ( $cb ? " (" . $cb . ")" : "" ) . "\n"; + push( @{ $self->{LOGGED_MESSAGES} }, $message ); +} } sub unusable { - my ($self, $msg, $dump) = @_; + my ( $self, $msg, $dump ) = @_; my $cb = $self->called_by(); - $self->write($msg, $UNUSABLE_LOG_LEVEL, $dump, $cb); + $self->write( $msg, $UNUSABLE_LOG_LEVEL, $dump, $cb ); } sub critical { - my ($self, $msg, $dump) = @_; + my ( $self, $msg, $dump ) = @_; my $cb = $self->called_by(); - $self->write($msg, $CRITICAL_LOG_LEVEL, $dump, $cb); + $self->write( $msg, $CRITICAL_LOG_LEVEL, $dump, $cb ); } sub error { - my ($self, $msg, $dump) = @_; + my ( $self, $msg, $dump ) = @_; my $cb = $self->called_by(); - $self->write($msg, $ERROR_LOG_LEVEL, $dump, $cb); + $self->write( $msg, $ERROR_LOG_LEVEL, $dump, $cb ); } sub warning { - my ($self, $msg, $dump) = @_; + my ( $self, $msg, $dump ) = @_; my $cb = $self->called_by(); - $self->write($msg, $WARNING_LOG_LEVEL, $dump, $cb); + $self->write( $msg, $WARNING_LOG_LEVEL, $dump, $cb ); } sub log { - my ($self, $msg, $dump) = @_; - $self->write($msg, $NORMAL_LOG_LEVEL, $dump); + my ( $self, $msg, $dump ) = @_; + $self->write( $msg, $NORMAL_LOG_LEVEL, $dump ); } sub normal { - my ($self, $msg, $dump) = @_; - $self->write($msg, $NORMAL_LOG_LEVEL, $dump); + my ( $self, $msg, $dump ) = @_; + $self->write( $msg, $NORMAL_LOG_LEVEL, $dump ); } sub info { - my ($self, $msg, $dump) = @_; - $self->write($msg, $INFO_LOG_LEVEL, $dump); + my ( $self, $msg, $dump ) = @_; + $self->write( $msg, $INFO_LOG_LEVEL, $dump ); } sub debug { - my ($self, $msg, $dump) = @_; - $self->write($msg, $DEBUG_LOG_LEVEL, $dump); + my ( $self, $msg, $dump ) = @_; + $self->write( $msg, $DEBUG_LOG_LEVEL, $dump ); } sub level { my $self = shift; return $self->{LOGGER} - ? $self->{LOGGER}->level(@_) - : ($self->{LEVEL} = @_ ? shift : $self->{LEVEL}); + ? $self->{LOGGER}->level(@_) + : ( $self->{LEVEL} = @_ ? shift : $self->{LEVEL} ); } - sub called_by { - my $self = shift; + my $self = shift; my $depth = 2; my $args; my $pack; @@ -154,15 +170,18 @@ sub called_by { my $bitmask; my @subr; my $str = ""; + while (1) { - ($pack, $file, $line, $subr, $has_args, $wantarray, $evaltext, - $is_require, $hints, $bitmask) = caller($depth); - unless (defined($subr)) { + ( + $pack, $file, $line, $subr, $has_args, + $wantarray, $evaltext, $is_require, $hints, $bitmask + ) = caller($depth); + unless ( defined($subr) ) { last; } $depth++; - $line = (3) ? "$file:".$line."-->" : ""; - push(@subr, $line.$subr); + $line = (3) ? "$file:" . $line . "-->" : ""; + push( @subr, $line . $subr ); } @subr = reverse(@subr); foreach my $sr (@subr) { @@ -171,6 +190,13 @@ sub called_by { } $str =~ s/ > $/: /; return $str; -} # of called_by +} # of called_by + +sub get_messages { + my $self = shift; + + return $self->{LOGGED_MESSAGES} +} + 1; diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/doc-head-open.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/doc-head-open.inc index b8aa2ad..778a791 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/doc-head-open.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/doc-head-open.inc @@ -2,3 +2,6 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> [% IF ( bidi ) %][% ELSE %][% END %] + \ No newline at end of file diff --git a/mainpage.pl b/mainpage.pl index f834985..820cbe7 100755 --- a/mainpage.pl +++ b/mainpage.pl @@ -60,4 +60,6 @@ $template->param( pendingsuggestions => $pendingsuggestions ); +C4::Context->logger->error( "an error string"); +C4::Context->logger->normal( "a normal string"); output_html_with_http_headers $query, $cookie, $template->output; -- 1.7.2.5