/** * @file NFLogManager.h * @brief LogManager Ŭ·¡½º * @remarks * @author °­µ¿¸í(edith2580@gmail.com) * @date 2009-04-02 */ #pragma once #include #include #include #include #include #include "NFSync.h" #include "NFThread.h" namespace Nave { class NFLogManager; /** * @class NFLogBuffer * @brief ·Î±×°¡ ÀúÀåµÇ´Â ·Î±× ¹öÆÛ ÀÌ°Ô ÆÄÀÏ·Î ÀúÀåµÈ´Ù. * @remarks * * @par * @author Edith * @date 2009-04-04 */ class NFLogBuffer { public: /// Write, Free ¹öÆÛ¸¦ ¸®½ºÆ®·Î °ü¸®ÇÏ°Ô µÇ´Âµ¥ typedef¸¦ ¿©±â¼­ Çß´Ù. typedef std::list List; enum { MAX_LOG_BUFFER = 65536 /// ·Î±×¹öÆÛÀÇ Å©±â }; /// »ç¿ëµÈ ¹öÆÛÀÇ »çÀÌÁî unsigned long m_dwUsage; /// ½ÇÁ¦ ¹öÆÛ char m_Buffer[MAX_LOG_BUFFER]; /// NFLogBuffer »ý¼ºÀÚ NFLogBuffer() : m_dwUsage(0) { } /// ÃʱâÈ­ ÇÔ¼ö VOID Initialize() { m_dwUsage = 0; } }; /** * @class NFLogThread * @brief ·Î±×¸¦ °ü¸®ÇÏ´Â ·Î±× ½º·¹µåÀÌ´Ù. ·Î±×¸Å´ÏÁ®¿¡¼­ »ç¿ëµÊ. * @remarks * * @par * @author Edith * @date 2009-04-04 */ class NFLogThread : public NFThread { public: /// NFLogThread »ý¼ºÀÚ NFLogThread(); /// NFLogThread ¼Ò¸êÀÚ ~NFLogThread(); /** * @brief ·Î±×¸¦ ÃʱâÈ­ÇÑ´Ù. * @param pLog ·Î±×¸Þ´ÏÁ® °´Ã¼ * @param bCompress ¾ÐÃà¿©ºÎ */ VOID Initialize(NFLogManager* pLog, BOOL bCompress); /** * @brief ·Î±×ÆÄÀÏÀÇ Å©±â¸¦ Á¶ÀýÇÑ´Ù. ÀÌÅ©±â°¡ µÇ¸é ´Ù¸¥ ÆÄÀÏ·Î ·Î±×¸¦³²±ä´Ù. * @param dwSize ·Î±×ÆÄÀÏÀÇ Å©±â byte ¼ö·Î ³²±ä´Ù 10 * 1024 * 1024 ´Â 10¸Þ°¡ */ inline VOID SetLogMaxSize(DWORD dwSize = MAX_FILE_SIZE) { m_dwMaxFileSize = dwSize; } /// ·Î±×¸¦ ÀúÀåÇÑ´Ù. BOOL FlushSignal() { return PulseEvent(m_hFlush); } /// ·Î±× ½º·¹µå¸¦ ½ÇÇàÇÑ´Ù. virtual unsigned int Run(); /// ·Î±× ½º·¹µå¸¦ Á¾·áÇÕ´Ï´Ù. virtual BOOL End(); private: enum { MAX_FILE_SIZE = 100 * 1024 * 1024 /// ±âº» ÆÄÀÏ »çÀÌÁî 100¸Þ°¡ }; /** * @brief ·Î±×ÆÄÀÏÀÇ À̸§À» ¼³Á¤ÇÕ´Ï´Ù. * @return ¼º°ø¿©ºÎ */ BOOL SetLogFileName(); /** * @brief ·Î±×¹öÆÛ¿¡ ·Î±×¸¦ Write ÇÕ´Ï´Ù. * @return ¼º°ø¿©ºÎ */ BOOL WriteLog(); private: /// ÇØ´ç ½º·¹µå°¡ Á¾·á‰ç´ÂÁö º¸´Â·ÎÁ÷ volatile LONG m_bEnd; /// ÇöÀç ÇØ´ç ½º·¹µå°¡ ÀÛµ¿ÁßÀÎÁö È®ÀÎÇÏ´Â À̺¥Æ® HANDLE m_hFlush; /// ·Î±×°¡ ÀúÀåµÇ´Â ÆÄÀÏÇÚµé HANDLE m_hFile; /// »ç¿ëµÈ ÆÄÀÏÅ©±â DWORD m_dwTotalWritten; /// ·Î±× ¸Þ´ÏÁ® NFLogManager* m_pLogHandle; /// ¾ÐÃà À¯¹« BOOL m_bCompress; /// ¾²±â ·Î±× ¹öÆÛ NFLogBuffer::List m_WriteBufferList; /// ·Î±×ÀÇ ÆÄÀÏÀ̸§ WCHAR m_szLogFileName[MAX_PATH]; /// ·Î±×ÆÄÀÏÀÇ ÃÖ´ë Å©±â DWORD m_dwMaxFileSize; }; /** * @class NFLogManager * @brief ·Î±×¸¦ ÀúÀåÇÒ¶§ »ç¿ëÇÏ´Â ·Î±× ¸Å´ÏÁ® Ŭ·¡½º * @remarks ·Î±× ¸Å´ÏÁ®´Â ÇÑ ¾îÇÃÀÌ ¿©·¯°³ÀÇ ·Î±×¸¦ Á¾·ùº°·Î Ãâ·ÂÇÒ ¼öµµ Àֱ⠶§¹®¿¡ ½Ì±ÛÅæÀ¸·Î ¸¸µéÁö ¾Ê´Â´Ù.\r\n * µðÅ×ÀϷα״ ¹ÙÀ̳ʸ®¸®¸¦ ³Ö±âÀ§ÇØ Á¸ÀçÇÏ´Â ·Î±×´Ù. \r\n * ¾È¿¡ µé¾î°¡´Â ·Î±×´Â °ÔÀÓ º°·Î ÇØ´ç ·Î±× ±¸Á¶Ã¼µîÀ» ±¸ÇöÇØ¾ßÇÑ´Ù. \r\n * µðÅ×ÀÏ ·Î±×ÀÇ °æ¿ì ¼ÓµµÁõ°¡¸¦ À§ÇØ Ã³À½¿£ ¸Þ¸ð¸®»ó¿¡ ¹öÆÛ¸¦ Àû°í ¹öÆÛ°¡ ²Ë áÀ¸¸é ÇØ´ç ¹öÆÛ¸¦ \r\n * WriteList¿¡ ³ÖÀºÈÄ ÇØ´ç ¹öÆÛ¸¦ ó¸®ÇÑ´Ù. \r\n * * @par * @author Edith * @date 2009-04-04 */ class NFLogManager { public: /// NFLogManager »ý¼ºÀÚ NFLogManager(void); /// NFLogManager ¼Ò¸êÀÚ ~NFLogManager(void); /** * @brief ·Î±× ¸Þ´ÏÁ®¸¦ ÃʱâÈ­ ÇÕ´Ï´Ù. * @param bCompress ¾ÐÃàÀ¯¹« * @param szLogFilePrefix ·Î±×ÆÄÀϸí * @return ¼º°ø¿©ºÎ */ BOOL Initialize(BOOL bCompress, const WCHAR* szLogFilePrefix = 0); /// ·Î±×¸Å´ÏÁ®¸¦ Á¾·áÇÕ´Ï´Ù. BOOL Destroy(); /// ·Î±×¹öÆÛÀÇ »çÀÌÁ Á¶ÀýÇÑ´Ù. VOID SetLogMaxSize(DWORD dwSize = 10 * 1024 * 1024); /** * @brief ·Î±×ÆÄÀÏÀÇ À̸§ * @return ·Î±×ÆÄÀÏÀ̸§ */ const WCHAR* GetLogFilePrefix() const { return m_szLogFilePrefix; } /** * @brief ·Î±×¸¦ ÀúÀåÇÕ´Ï´Ù. * @return ¼º°ø¿©ºÎ */ BOOL Flush(); /** * @brief ÇöÀç »ç¿ëµÇ´Â ·Î±× ¹öÆÛ¸¦ ±¸ÇÕ´Ï´Ù. * @return ·Î±×¹öÆÛ */ NFLogBuffer* GetBuffer(); /** * @brief ·Î±×¹öÆÛ¸¦ ÇÒ´çÇÑ´Ù. * @param usReserve ÇÒ´ç »çÀÌÁî * @return ·Î±×¹öÆÛÀÇ À§Ä¡Æ÷ÀÎÅÍ */ char* ReserveBuffer(unsigned short usReserve); /** * @brief ÇÒ´çµÈ ·Î±×¹öÆÛ¸¦ Àû¿ë½Ãŵ´Ï´Ù. * @param usRealUse »çÀÌÁî */ VOID Complete(unsigned short usRealUse) { m_lpDetailBuffer->m_dwUsage += usRealUse; } /** * @brief Ãâ·Â»óÅ·Π·Î±×¹öÆÛ¸¦ ÇÒ´çÇÕ´Ï´Ù. * @param ppDetailBuffer */ VOID PushBuffer(NFLogBuffer** ppDetailBuffer); VOID SpliceInWriteBuffer(NFLogBuffer::List& logBufferList); VOID SpliceInFreeBuffer(NFLogBuffer::List& logBufferList); private: enum { DEFAULT_FREE_LOG_BUFFER_NUM = 10 /// ÃÖ´ë 10°³±îÁö ÇÁ¸®¹öÆÛ¸¦ »ý¼ºÇÑ´Ù. }; /// Sync °´Ã¼ NFSync m_LogSync; /// ·Î±× ÆÄÀϸí WCHAR m_szLogFilePrefix[MAX_PATH]; /// ·Î±× ÀúÀå¿ë ½º·¹µå º¯¼ö NFLogThread m_LogSaveThread; /// ºñ¾îÀÖ´Â ¹öÆÛ NFLogBuffer::List m_FreeList; /// ÆÄÀÏ¿¡ ¾²¿©Áú ¹öÆÛ NFLogBuffer::List m_WriteList; /// ÇöÀç »ç¿ëµÇ´Â ¹öÆÛ NFLogBuffer* m_lpDetailBuffer; }; }