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!");