Revision 3 (by ahitrov@rambler.ru, 2010/03/24 15:19:32) |
The CORE
|
package Contenido::Msg;
use strict;
use warnings;
use Contenido::Globals;
use vars qw (@EXPORT @ISA %HANDLERS);
require Exporter;
@ISA = qw(Exporter);
@EXPORT = qw(&msg);
#������� �� ������� ������ &debug � ��� log_handlers
%HANDLERS = (
debug => \&default_warn_handler,
log => \&default_warn_handler,
logging => \&default_warn_handler,
warn => \&default_warn_handler,
warning => \&default_warn_handler,
err => \&default_warn_handler,
error => \&default_warn_handler,
crit => \&default_warn_handler,
sql => \&default_sql_handler,
);
sub msg {
my ($msg, $tag) = @_;
$tag = lc($tag);
#��� handler �� ����� ��� ��������� ��� ������ handler �����
unless ($tag and exists($HANDLERS{$tag}) and (ref($HANDLERS{$tag}) eq 'CODE')) {
warn "�� ��������� ��� ������������ handler ��� ��������� ����: '$tag'\n";
return undef;
}
my ($package, $filename, $line) = caller();
my @caller = caller(1);
my $subroutine;
if ( $caller[3] =~ /::(\w+)$/ ) {
$subroutine = $1;
} else {
$subroutine = caller[3];
}
#��������� ������ �� ������ � ����������� �������
my $string = 'Contenido '.$tag.' ['.scalar(localtime).'] '.$$.': '.$package.'/'.$line.' '.$subroutine.': '.$msg;
#�������� handler ��������� ���������
eval { $HANDLERS{$tag}->($string, $tag) };
warn "Error $@ in handler $tag\n" if ($@);
}
sub default_warn_handler {
my ($string, $tag) = @_;
#���������� ���� ��� ��������� debug � ������� ����������
warn $string."\n" unless ($tag eq 'debug' and !$DEBUG);
}
sub default_sql_handler {
my ($string, $tag) = @_;
#������ ��� $DEBUG_SQL ��������������
warn $string."\n" if ($DEBUG_SQL);
}
1;