cakephpのログ出力をlog4phpにする

log4phpをダウンロード

http://www.vxr.it/log4php/download.html

log4phpを配置

[cakeインストールディレクトリ]/vendors/log4php/

cake_log.phpを編集


if (!class_exists('File')) {
require LIBS . 'file.php';
}

if (!defined('LOG_WARNING')) {
define('LOG_WARNING', 3);
}
if (!defined('LOG_NOTICE')) {
define('LOG_NOTICE', 4);
}
if (!defined('LOG_DEBUG')) {
define('LOG_DEBUG', 5);
}
if (!defined('LOG_INFO')) {
define('LOG_INFO', 6);
}

define('LOG4PHP_CONFIGURATION', ROOT . DS . APP_DIR . DS .'config' .DS .'log4php.properties');

require_once(VENDORS.'log4php/LoggerManager.php');

class CakeLog {

function CakeLog() {
$args = func_get_args();
if (method_exists($this, '__destruct')) {
register_shutdown_function (array(&$this, '__destruct'));
}
}

function __destruct() {
LoggerManager::shutdown();
}

function write($type, $msg) {

if (!defined('LOG_ERROR')) {
define('LOG_ERROR', 2);
}
if (!defined('LOG_ERR')) {
define('LOG_ERR', LOG_ERROR);
}
$levels = array(
LOG_WARNING => 'warning',
LOG_NOTICE => 'notice',
LOG_INFO => 'info',
LOG_DEBUG => 'debug',
LOG_ERR => 'error',
LOG_ERROR => 'error'
);

if (is_int($type) && isset($levels[$type])) {
$type = $levels[$type];
}

$logger =& LoggerManager::getLogger(basename($_SERVER['SCRIPT_NAME']));
$output = $msg;
switch ($type) {
case 'debug':
$logger->debug($output);
break;
case 'info':
$logger->info($output);
break;
case 'warning':
$logger->warn($output);
break;
case 'error':
$logger->error($output);
break;
}
return true;
}
}
?>

log4php.propertiesを作成

[cakeインストールディレクトリ]/app/config/log4php.properties


log4php.rootLogger=DEBUG, APP
log4php.appender.APP=LoggerAppenderDailyFile
log4php.appender.APP.file=/home/mmm/log/web/sample_log_%s.log
log4php.appender.APP.layout=LoggerPatternLayout
log4php.appender.APP.layout.ConversionPattern=%d %5p - %m%n


注意点

LoggerAppenderDailyFile って日付でローテートしてくれるのかと思ったら日付付きのログファイルにログ出力するだけでした。
ホントにローテートさせたいのであれば、Appenderを自作するかlogrotateとか使うってなる感じです。

0 コメント: