/********************************************************************************
*		ソースファイル名：Log.h													*
*		用            途：ログ出力クラス定義									*
*		備            考：														*
*		履            歴：														*
********************************************************************************/
/****************************
*   コンパイル環境定数	    *
****************************/
#pragma once
/****************************
*   インクルードファイル    *
****************************/
#include "MemManager.h"
/****************************
*        マクロ定義			*
****************************/
/***** レベルの比較方法 *****/
/*
		LOG_LEVEL_QUANTITY	・・・SetLevel()で設定したレベル以上のレベルを出力する方法
		LOG_LEVEL_KIND		・・・SetLevel()で設定するレベルはビットフィールドとして利用。
								  対象ビットがＯＮのとき出力
*/

#define	LOG_LEVEL_QUANTITY		0		/*	大きさによる比較	*/
#define	LOG_LEVEL_KIND			1		/*	品種による比較		*/
/****************************
*        構造体定義		    *
****************************/
/****************************
*        クラス定義		    *
****************************/
class CLog
{
public:
						CLog();
						CLog(TCHAR *szFileName, BOOL bNew = TRUE, int nShareMode = 0);
	virtual			   ~CLog();
			void		Print(TCHAR *szFmt, ...);
			void		PrintBuffer(TCHAR* pPtr);			
			void		Print(CString &str);
			void		Print();
			void		Print(INT32 nLevel, TCHAR *szFmt, ...);
			void		Print(INT32 nLevel, CString &str);
			void		Print(INT32 nLevel);
			BOOL		CreateFile(TCHAR *szFileName, BOOL bNew);
			void		Enable(BOOL bEnable = TRUE);

			void		SetConfig(BOOL bPrintDate, BOOL bAutoReturn, BOOL bEnable = TRUE, SIZE_T uDeleteSize = 0, BOOL bFileBackup = FALSE, int nShareMode = 0);
			void		SetDeleteSize(SIZE_T uDeleteSize = 0, BOOL bFileBackup = FALSE);
			TCHAR	   *GetWritePtr(SIZE_T *upSize);
			INT32		SetLevel(INT32 nNewLevel, INT32 nMethod = LOG_LEVEL_QUANTITY);
protected:
			void		Restruct();
	inline	BOOL		CheckLevel(INT32 nLevel);
			void		LogOpen(FILE** fp);
			BOOL		IsNewFile( LPCTSTR szFile ) ;

protected:
			CMemManager	m_WriteBuf;				/* 出力バッファ			*/
			BOOL		m_bEnable;				/* 出力フラグ			*/
			BOOL		m_bPrintDate;			/* 日時出力フラグ		*/
			BOOL		m_bAutoReturn;			/* 自動改行フラグ		*/
			TCHAR		m_szPath[_MAX_PATH];	/* ファイル名			*/
			UINT64		m_uDeleteSize;			/* 削除サイズ(Bytes)	*/
			BOOL		m_bFileBackup;			/* ファイルバックアップ有無フラグ(ファイル削除実行時に対象ファイルをリネームして残しておく)	*/
												/* ※ファイルは残ったままとなるので別手段による削除が必要となるので注意すること			*/
			INT32		m_nLevel;				/* 出力レベル			*/
			INT32		m_nMethod;				/* レベル比較方法		*/
			INT32		m_nShareMode;			/* ファイル排他モード	*/
};
/****************************
*         関数 宣言		    *
****************************/
/****************************
*		　変数　宣言	    *
****************************/
/****************************
*   コンパイル環境定数	    *
****************************/
