Log::Dispatch::*で色をつけたりつけなかったりファイルに出してみたり
Yappoさんが作ってくれた Log::Dispatch::Screen::Color
を使って、
- 環境変数 ORENO_LOG の値が:
- "-"
- → 色をつけないで、STDOUT に出力
- daemontools配下+multilogでログるときとか
- "-" 以外の何か
- → 色をつけないで、環境変数 ORENO_LOG をファイル名としたファイルに出力
- 普通にファイルにログりたいときとか
- からっぽ
- → 色をつけて、STDOUT に出力
- デバッグ中とかで端末で起動して目視するときとか
- "-"
するコード片を書いてみました。
#!/usr/bin/env perl use strict; use warnings; use Log::Dispatch; use UNIVERSAL::require; my $logger = Log::Dispatch->new( callbacks => sub { my %p = @_; $p{message}."\n" }, ); my %log_prop = ( name => 'oreno_log', min_level => 'debug', ); my $log_class = 'Log::Dispatch::'; if ($ENV{ORENO_LOG}) { if ($ENV{ORENO_LOG} eq '-') { $log_class .= 'Screen'; } else { $log_class .= 'File'; %log_prop = ( %log_prop, filename => $ENV{ORENO_LOG}, mode => 'append', permissions => 0640, ); } } else { $log_class .= 'Screen::Color'; } $log_class->require; if ($log_class =~ /Screen::Color/) { # as you like no warnings 'once'; $Log::Dispatch::Screen::Color::DEFAULT_COLOR->{debug} = { text => 'red' }; } $logger->add( $log_class->new(%log_prop) ); $logger->log(level=>'info', message => "info message"); $logger->debug("debug me!");