Log::Dispatch помогает задать - насколько подробно будет осуществляться логирование. Будут ли выводиться в лог только критические ошибки, или будут включены и отладочные сообщения, или уровень, начиная с не критичных предупреждений. Кроме того, с помощью Log::Dispatch удобно задавать объекты для вывода сообщений.
Пример использования Log::Dispatch в Catalyst-приложении
Как создать Catalyst-приложение с нуля >>
app::Log.pm :
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
package app::Log; use uni::perl; use base 'Log::Dispatch'; sub new { my $class = shift; my $log = $class->SUPER::new( outputs => [ $ENV{'DEBUG'}. ? [ 'Screen', min_level => 'debug', newline => 1, stderr => 1 ] : [ 'File', min_level => 'debug', newline => 1, filename => 'devlogfile' ], ], @_, ); return $log; } 1; |
По умолчанию, для управления логами Catalyst использует Catalyst::Log. Если необходимо вмешаться в процесс логирования, используется инструкция:
|
1 2 |
__PACKAGE__->log( MyLogger->new ); __PACKAGE__->setup; |
и в дальнейшем, команды типа:
|
1 |
$c->log->info( 'Now logging with my own logger!' ); |
app.pm :
|
1 2 3 4 5 |
use app::Log; ... __PACKAGE__->log(app::Log->new()); __PACKAGE__->setup(); |
Root.pm :
|
1 |
$c->log->debug('ARG: '.$c->stash->{domain}); |
С помощью переменной DEBUG реализуется вариативность работы с логами. Если переменная задана:
|
1 |
DEBUG=1 perl script/app_server.pl |
вывод всей отладочной информации осуществляется прямо на экран рабочего терминала.
Если переменная DEBUG не задана:
|
1 |
perl script/app_server.pl |
запись данных будет вестись в файл devlogfile. Если файла devlogfile не существует, приложение создаст его.
Пример записи в devlogfile:
|
1 2 3 4 |
*** Request 1 (0.200/s) [19227] [Thu Jul 24 22:26:10 2014] *** Path is "/" "GET" request for "/" from "190.10.154.66" ARG: dev-lab.info |
С помощью дополнительных модулей, можно организовать вывод логов в таблицы базы данных (Log::Dispatch::DBI), через Jabber (Log::Dispatch::Jabber), в окно Tk (Log::Dispatch::Tk), в окно windows event log (Log::Dispatch::Win32EventLog), и множество других интересных вариантов: Log::Dispatch::Syslog, Log::Dispatch::ApacheLog, Log::Dispatch::Email, и т.п.
Данная вариантивность особенно удобна, при запуске Catalyst-приложения в разных средах, с разным окружением и для разных целей. Ведение логов на боевых серверах отличается от ведения логов в момент разработки.
Полезные ссылки:
search.cpan.org: Log::Dispatch