package jp.co.sint.mpi;

import java.net.URL;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

/**
 * <p>LoggerFactoryクラス. </p>
 * @author SBI VeriTrans Co., Ltd.
 * @version 1.0, 2005/05 created.
 */
class LoggerFactory {
  static LoggerFactory singleton = null;
  
  /**
   * <p>インスタンス取得メソッド.</p>
   * @return インスタンス
   */
  public synchronized static LoggerFactory getInstance() {
    if (singleton == null) {
      singleton = new LoggerFactory();
    }
    return singleton;
  }
  
  protected static String LOG4J_CONFIG = "/DddSamplesLogger.properties";
  // トレースログ
  protected Logger traceLogger = null;
  // サマリーログ
  protected Logger summaryLogger = null;
  // トランザクションログ
  protected Logger txnLogger = null;
  
  // コンストラクター.
  public LoggerFactory() {
    super();
    // init Log4j.
    URL url = this.getClass().getResource(LOG4J_CONFIG);
    if (url == null) {
      System.err.println(this.getClass().getName() 
          + ": resource not found. : " + LOG4J_CONFIG);
    } else {
      System.out.println(this.getClass().getName() 
          + ": properties found. : " + url);
      PropertyConfigurator.configure(url);
    }
    // Get logger.
    // トレースログ
    this.traceLogger   = Logger.getLogger(LoggerFactory.class.getPackage().getName() + ".TraceLogger");
    // サマリーログ
    this.summaryLogger = Logger.getLogger(LoggerFactory.class.getPackage().getName() + ".SummaryLogger");
    // トランザクションログ
    this.txnLogger     = Logger.getLogger(LoggerFactory.class.getPackage().getName() + ".TxnLogger");
  }
  
  /**
   * <p>Loggerインスタンス（トレースログ用）の取得 </p>
   * @return logger
   */
  protected static Logger getTraceLogger() {
    return getInstance().traceLogger;
  }
  
  /**
   * <p>Loggerインスタンス（サマリーログ用）の取得 </p>
   * @return logger
   */
  protected static Logger getSummaryLogger() {
    return getInstance().summaryLogger;
  }

  /**
   * <p>Loggerインスタンス（トランザクションログ用）の取得 </p>
   * @return logger
   */
  protected static Logger getTxnLogger() {
    return getInstance().txnLogger;
  }
}