<?php
/**
* @file
* @brief log4phpサンプル
*
* @note
* - log4phpはPEAR::DBを使用している。
* - PEAR::DBではSQLite3は未対応。
* 
* @code
$ createdb -U postgres log4php
$ psql -U postgres log4php
----
CREATE TABLE log4php (
      id SERIAL NOT NULL PRIMARY KEY
    , created timestamp DEFAULT NULL
    , logger TEXT DEFAULT NULL
    , remote_user TEXT DEFAULT NULL
    , remote_addr TEXT DEFAULT NULL
    , uri TEXT DEFAULT NULL
    , level TEXT DEFAULT NULL
    , message TEXT DEFAULT NULL
    , thread TEXT DEFAULT NULL
    , file TEXT DEFAULT NULL
    , line TEXT DEFAULT NULL
);
log4php=# \q
----
* @endcode
*/

/// エラーレベル
error_reporting(E_ALL ^ E_NOTICE);

/// 文字コード
mb_internal_encoding('UTF-8');
mb_http_input('auto');
mb_http_output('pass');

define('SYSTEM_DEBUG', false);
define('SYSTEM_ROOT_DIR', str_replace('\\', '/', dirname(dirname(__FILE__))) );
define('SYSTEM_DB_DIR', SYSTEM_ROOT_DIR);
define('SYSTEM_LIB_DIR', SYSTEM_ROOT_DIR . '/log4php');	// PHP5

define('DATABASE_ENCODING', 'UTF-8');
define('DATABASE_USER',			'postgres');
define('DATABASE_PASSWORD',		'');
define('DATABASE_HOST',			'localhost');
define('DATABASE_NAME',			'log4php');
define('DATABASE_DSN', 			'pgsql://' . DATABASE_USER . ':' . DATABASE_PASSWORD . '@' . DATABASE_HOST . '/' . DATABASE_NAME);


////////////////////////////////////////////////////////////////////////////////
// log4php
////////////////////////////////////////////////////////////////////////////////
define('LOG4PHP_CONFIGURATOR_CLASS', SYSTEM_LIB_DIR.'/log4php/log4phpArrayConfigurator');
$g_logger_properties = array(
	'log4php.debug' => 'false',
	'log4php.rootLogger' => (SYSTEM_DEBUG) ? 'DEBUG, default' :'INFO, db', // このレベル以下のログを記録する( DEBUG > INFO > WARN > ERROR > FATAL )
	'log4php.appender.default' => 'LoggerAppenderEcho',
	'log4php.appender.default.layout' => 'LoggerLayoutSimple',
	'log4php.appender.file' => 'LoggerAppenderDailyFile',
	'log4php.appender.file.file' => SYSTEM_DB_DIR . '/db.%s.log',
	'log4php.appender.file.layout' => 'LoggerLayoutTTCC',
	'log4php.appender.db' => 'LoggerAppenderDb',
	'log4php.appender.db.dsn' => DATABASE_DSN,
	'log4php.appender.db.createTable' => 'false',
	'log4php.appender.db.table' => 'syslog',
	'log4php.appender.db.sql' => "INSERT INTO log4php (created, logger, remote_user, remote_addr, uri, level, message, thread, file, line) VALUES ('%d{Y-m-d H:i:s}','%c', '%X{remote_user}','%X{remote_addr}', '%X{uri}','%p','%m','%t','%F','%L')",
//	'log4php.appender.db.sql' => "INSERT INTO log4php (id, created, logger, remote_user, remote_addr, uri, level, message, thread, file, line) VALUES (NULL, '%d{Y-m-d H:i:s}','%c', '%X{remote_user}','%X{remote_addr}', '%X{uri}','%p','%m','%t','%F','%L')", // SQLite
	'log4php.appender.db.encoding' => DATABASE_ENCODING,
);

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

main($argc, $argv);

function main($argc, $argv)
{
	LoggerMDC::put('remote_user', isset($_SERVER['PHP_AUTH_USER']) ? $_SERVER['PHP_AUTH_USER'] : $_SERVER['REMOTE_USER']);
	LoggerMDC::put('remote_addr', $_SERVER['REMOTE_ADDR']);
	LoggerMDC::put('uri', $_SERVER['REQUEST_URI']);

	echo "<h3>log4php sample</h3>\n";
	echo "<pre>";
	$logger = &LoggerManager::getRootLogger();
	$logger->info( 'test start' );
	$logger->warn( 'Warning Message' );
	$logger->error( 'ERROR MESSAGE' );
	$logger->fatal( 'FATAL MESSAGE' );
	$logger->debug( 'only debug' );
	$logger->info( '"\エスケープテスト' );
	$logger->info( 'test end' );
	echo "</pre>";
}

function db_connect()
{
	require_once('DB.php');
	$db = &DB::connect(DATABASE_DSN);
	if(PEAR::isError($db)){
		echo $db->getMessage();
	}else{
		echo "DB::connect() success.";
	}
}
