<?php
/**
* ロガーを生成するファクトリクラス
*
* PHP version 5
*
* @package    core
* @author     stk2k <stk2k@sazysoft.com>
* @copyright  2008 stk2k, sazysoft
*/

class charcoal_LoggerFactory 
{
	/*
	 * ロガーを作成
	 */
	public static function create( $logger_name )
	{
		if ( strlen("$logger_name") == 0 ){
			throw new ParameterException();
		}

		// 設定プロバイダを作成
		$provider = charcoal_ConfigProviderFactory::create();

		// 設定値格納用オブジェクトを作成
		$config= new charcoal_Config();

		// 個別設定ファイルを読み込む
		$config_name = "loggers/$logger_name.logger";
		$config->append( $provider->load( $config_name ) );

		// クラス名を取得
		$class_name = $config->getString( 'class_name' );

		// クラス名の確認
		if ( !$class_name || !charcoal_ClassUtil::validateClassName($class_name) ){
			throw new charcoal_LoggerConfigException( 'class_name', "invalid class name:$class_name" );
		}

		// ロガーのインスタンス生成
		$logger = charcoal_ClassUtil::newInstance( $class_name );

		// 生成したインスタンスがILoggerインタフェースを実装しているか確認
		if ( !($logger instanceof charcoal_ILogger) ){
			// 実装例外
			throw new charcoal_InterfaceImplementException( $class_name, "charcoal_ILogger" );
		}

		// ロガーを初期化
		$logger->init( $config );

		// ロードしたロガーを返却
		return $logger;
	}
}
