package org.itscool.commons.logging;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;


public class DateLotateLog extends SimpleLog{
    private static DateLotateLog log = null;
    
    /**
     * Logインスタンスを取得します
     * @return Logインスタンスを返します
     */
    public static synchronized AbstractLog getInstance(){
        if( log == null ){
            log = new DateLotateLog();
        }
        return log;
    }
    
    /**
     * ログをファイルに出力します。
     *
     * @param clazz outメソッドを呼出したクラス名
     * @param func outメソッドを呼び出したメソッド名
     * @param logMsg ログ
     * @param levelNow ログの出力レベル
     */
    protected void outFile(String clazz, String func, String logMsg, String levelNow, int line)
    throws IOException{
        if( maxSize <= 0 ){
            outDisp( clazz, func, logMsg, levelNow, line );
            outDisp( DateLotateLog.class.getName(), "outFile()", "ファイルの出力サイズが０です", ERROR, line );
            return;
        }
        
        //ログファイルのサイズチェック
        sizeCheck();
        //ファイルオープン
        //RandomAccessFile raf = new RandomAccessFile( logPath , "rw" );
        //ファイルの最後へ移動
        //raf.seek( raf.length());
        //メッセージの書き込み
        //raf.writeBytes(Log.getMsg( clazz, func, logMsg, levelNow));
        //ファイルクローズ
        //raf.close();
        Writer w = new OutputStreamWriter(new FileOutputStream(cnvDateLotatePath(logPath), true), encode);
        w.write(DateLotateLog.getMsg( clazz, func, logMsg, levelNow, line));
        w.close();
    }
    
    /**
     * ログファイルの拡張子を日付付きで返します
     * @param path ログファイルのパス
     * @return 拡張子に日付をセットしたログファイルのパスを返します
     */
    protected String cnvDateLotatePath(String path){
        String logPath = path + "." + getNowDateYYYYMMDD();
        return logPath;
    }
}

