以下のようにして、Zend_Logを使ってLog::Minimalっぽくログ出力できるようにした。
<?php require_once(dirname(__FILE__) . '/Zend/Log.php'); require_once(dirname(__FILE__) . '/Zend/Log/Writer/Stream.php'); class Logger { static public $logger = null; static public $TRACE_LEVEL = 0; static public function factory() { if ( !self::$logger ) { $stream = 'php://stderr'; if ( $_SERVER['LM_DEBUG'] ) { $stream = '/tmp/debug.log'; } $logger = new Zend_Log(); $writer = new Zend_Log_Writer_Stream($stream); $format = '%timestamp% [%priorityName%] %message% at %trace%' . PHP_EOL; $formatter = new Zend_Log_Formatter_Simple($format); $writer->setFormatter($formatter); $logger->addWriter($writer); if ( !$_SERVER['LM_DEBUG'] ) { $filter = new Zend_Log_Filter_Priority(Zend_Log::INFO); $logger->addFilter($filter); } self::$logger = $logger; } return self::$logger; } } function _logger($level, $args, $full = false) { // ログメッセージ $msg = $args[0]; array_shift($args); $param = array(); // 引数の調整 if ( count($args) >= 1 ) { if ( is_array($args[0]) ) { $param = $args[0]; } else { foreach ($args as $a) { $param[] = $a; } } } // ログインスタンスを生成 $logger = Logger::factory(); // トレース情報 $msg_trace = ''; $trace = debug_backtrace(); if ( $full ) { $i = Logger::$TRACE_LEVEL + 1; $stack = array(); while ( $t = $trace[$i] ) { $stack[] = sprintf("%s line %s", $t['file'], $t['line']); $i++; } $msg_trace = implode(' ,', $stack); } else { $t = $trace[Logger::$TRACE_LEVEL+1]; $msg_trace = sprintf("%s line %s", $t['file'], $t['line'] ); } $logger->setEventItem('trace', $msg_trace); // 出力 if ( count($param) ) { $logger->$level(vsprintf($msg, $param)); } else { $logger->$level($msg); } } function emergf() { _logger('emerg', func_get_args()); } function alertf() { _logger('alert', func_get_args()); } function critf() { _logger('crit', func_get_args()); } function errf() { _logger('err', func_get_args()); } function warnf() { _logger('warn', func_get_args()); } function noticef() { _logger('notice', func_get_args()); } function infof() { _logger('info', func_get_args()); } function debugf() { _logger('debug', func_get_args()); } function emergff() { _logger('emerg', func_get_args(), 1); } function alertff() { _logger('alert', func_get_args(), 1); } function critff() { _logger('crit', func_get_args(), 1); } function errff() { _logger('err', func_get_args(), 1); } function warnff() { _logger('warn', func_get_args(), 1); } function noticeff() { _logger('notice', func_get_args(), 1); } function infoff() { _logger('info', func_get_args(), 1); } function debugff() { _logger('debug', func_get_args(), 1); }