Index: log4php/log4phpArrayConfigurator.php
===================================================================
--- log4php/log4phpArrayConfigurator.php	(リビジョン 0)
+++ log4php/log4phpArrayConfigurator.php	(リビジョン 257)
@@ -0,0 +1,40 @@
+<?php
+/**
+* @file
+* @brief log4phpを配列によりカスタマイズする
+*
+*/
+
+// LOG4PHP_DIRの定義は、タイミング上ここで平気です。
+require_once(LOG4PHP_DIR.'/LoggerPropertyConfigurator.php');
+
+/**
+* log4phpを配列によりカスタマイズする
+*/
+class log4phpArrayConfigurator extends LoggerPropertyConfigurator {
+
+    public function log4phpArrayConfigurator()
+    {
+        $this->loggerFactory = new LoggerDefaultCategoryFactory();
+    }
+
+    // LoggerManagerの初期化関数からこのメソッドがstaticに呼ばれます。
+    // ので、オーバーライドしておきます。
+    public static function configure($url = '')
+    {
+        // log4phpArrayConfiguratorをnewするように修正します。
+        $configurator = new log4phpArrayConfigurator();
+        // $configurator = new LoggerPropertyConfigurator(); ←元
+        $repository =& LoggerManager::getLoggerRepository();
+        return $configurator->doConfigure($url, $repository);
+    }
+
+    public function doConfigure($url, &$repository)
+    {
+        // 外部で定義された連想配列(parse_ini_file()したのと同じ形)を使用
+        global $g_logger_properties;
+        $properties = $g_logger_properties;
+        return $this->doConfigureProperties($properties, $repository);
+    }
+}
+?>

Index: log4php/appenders/LoggerAppenderDailyFileDynamic.php
===================================================================
--- log4php/appenders/LoggerAppenderDailyFileDynamic.php	(リビジョン 0)
+++ log4php/appenders/LoggerAppenderDailyFileDynamic.php	(リビジョン 257)
@@ -0,0 +1,68 @@
+<?php
+/**
+ * @file
+ * @brief 起動時の時間からファイル名を作る。メッセージ出力時にファイルを作成する。
+ *
+ * @note
+ * - LoggerAppenderDailyFileとの違いは、ログファイル生成のタイミングのみである。\n
+ *   ファイルのOWNERをメッセージ出力時に決定して欲しい時は便利かもしれない。
+ * - ファイル生成のタイミング
+ *   - LoggerAppenderDailyFile        : getLogger(), getRootLogger()された時
+ *   - LoggerAppenderDailyFileDynamic : debug(), info()等のメッセージ出力の時
+ *
+ * @package log4php
+ * @subpackage appenders
+ */
+
+/**
+ * @ignore 
+ */
+if (!defined('LOG4PHP_DIR')) define('LOG4PHP_DIR', dirname(__FILE__) . '/..');
+ 
+require_once(LOG4PHP_DIR . '/appenders/LoggerAppenderDailyFile.php');
+                  
+class LoggerAppenderDailyFileDynamic extends LoggerAppenderDailyFile {
+    /**
+    * Constructor
+    *
+    * @param string $name appender name
+    */
+    function LoggerAppenderDailyFileDynamic($name)
+    {
+    	$this->LoggerAppenderDailyFile($name);
+    }
+    
+    /// Override LoggerAppenderFile::activateOptions()
+    function activateOptions()
+    {
+	}
+	
+    /// Override LoggerAppenderFile::append()
+    function append($event)
+    {
+    	if(!$this->fp) $this->dynamicOpen();
+        if ($this->fp and $this->layout !== null) {
+
+            LoggerLog::debug("LoggerAppenderDailyFileDynamic::append()");
+        
+            @fwrite($this->fp, $this->layout->format($event));
+        }
+    }
+   
+	function dynamicOpen()
+    {
+        $fileName = $this->getFile();
+        LoggerLog::debug("LoggerAppenderDailyFileDynamic::activateOptions() opening file '{$fileName}'");
+        $this->fp = @fopen($fileName, ($this->getAppend()? 'a':'w'));
+        if ($this->fp) {
+            if ($this->getAppend())
+                fseek($this->fp, 0, SEEK_END);
+            @fwrite($this->fp, $this->layout->getHeader());
+            $this->closed = false;
+        } else {
+            $this->closed = true;
+        }
+    }
+}
+
+?>

Index: log4php/appenders/LoggerAppenderMailEvent.php
===================================================================
--- log4php/appenders/LoggerAppenderMailEvent.php	(リビジョン 250)
+++ log4php/appenders/LoggerAppenderMailEvent.php	(作業コピー)
@@ -86,7 +86,7 @@
      */
     function LoggerAppenderMailEvent($name)
     {
-        $this->LoggerAppenderSkeleton($name);
+        parent::__construct($name);
     }
 
     function activateOptions()
Index: log4php/appenders/LoggerAppenderDb.php
===================================================================
--- log4php/appenders/LoggerAppenderDb.php	(リビジョン 250)
+++ log4php/appenders/LoggerAppenderDb.php	(作業コピー)
@@ -45,6 +45,11 @@
  */
 class LoggerAppenderDb extends LoggerAppenderSkeleton {
 
+	/**
+	* DBのエンコード
+	*/
+	var $encoding = null;
+
     /**
      * Create the log table if it does not exists (optional).
      * @var boolean
@@ -93,7 +98,7 @@
      */
     function LoggerAppenderDb($name)
     {
-        $this->LoggerAppenderSkeleton($name);
+        parent::__construct($name);
     }
 
     /**
@@ -141,11 +146,15 @@
     function append($event)
     {
         if ($this->canAppend) {
-
+			// ひとまず message だけでもエスケープ
+			$event->message = $this->db->escapeSimple($event->message);
             $query = $this->layout->format($event);
 
             LoggerLog::debug("LoggerAppenderDb::append() query='$query'");
 
+			// php内部文字コードからDB文字コードへ変換
+            if(!is_null($this->encoding)) $query = mb_convert_encoding($query, $this->encoding, mb_internal_encoding());
+
             $this->db->query($query);
         }
     }
@@ -208,6 +217,18 @@
     {
         $this->table = $table;
     }
+
+	/**
+	* @return string
+	*/
+    function getEncoding()
+    {
+    	return $this->encoding;
+    }
     
+    function setEncoding($encoding)
+    {
+    	$this->encoding = $encoding;
+    }
 }
 
Index: log4php/appenders/LoggerAppenderAdodb.php
===================================================================
--- log4php/appenders/LoggerAppenderAdodb.php	(リビジョン 250)
+++ log4php/appenders/LoggerAppenderAdodb.php	(作業コピー)
@@ -118,7 +118,7 @@
      */
     function LoggerAppenderDb($name)
     {
-        $this->LoggerAppenderSkeleton($name);
+        parent::__construct($name);
     }
 
     /**
