CLogFile写日志

CLogFile::CLogFile()
{

}

CLogFile::~CLogFile()
{

}
//获取文件名称
CString CLogFile::GetFileName()
{
    CString m_sFileName;

    m_sFileName = CTime::GetCurrentTime().Format("%Y-%m-%d") + _T(".log");

    return m_sFileName;
}
//获取应用程序所在路径
CString CLogFile::GetFilePath()
{   
    CString m_FilePath;

    GetModuleFileName(NULL,m_FilePath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);

    m_FilePath.ReleaseBuffer();

    int m_iPosIndex;

    m_iPosIndex = m_FilePath.ReverseFind(_T('\\')); 

    m_FilePath = m_FilePath.Left(m_iPosIndex) + _T("\\Log");

    return m_FilePath;
}

BOOL CLogFile::WriteLog(CString LogText)
{
    try
    {
        CFile m_File;
        CStdioFile m_SFile;
        CFileFind m_FileFind;
        CString strLog;
        CString m_sFileName = GetFileName();
        CString m_sFilePath = GetFilePath();
        CString strTime = CTime::GetCurrentTime().Format(_T("[%Y-%m-%d %H:%M:%S] "));
        /*
        格式符号说明 
        %a —— 星期(缩写英文),如Fri; 
        %A —— 星期(全写英文),如Friday 
        %b —— 月份(缩写英文),如Oct 
        %B —— 月份(全写英文),如 October 
        %c  —— 月/日/年 时:分:秒,如 10/13/06 19:17:17 
        %d  —— 日期(1 ~ 31) 
        %H  —— 时(24小时制)(0 ~ 23) 
        %I    —— 时(12小时制)(0 ~ 12) 
        %j    —— 一年当中的第几天,(1 ~ 366) 
        %m  —— 月份(数字 1 ~ 12) 
        %M  —— 分(0 ~ 59) 
        %p  —— 12小时中的A M/PM指示,或者AM,或者PM 
        %S  —— 秒(0 ~ 59) 
        %U  —— 一年中的第几周,星期日作为每周的第一天(0 ~ 53) 
        %w  —— 星期(数字表示,0 ~ 6,0代表星期日) 
        %W —— 一年中的第几周,星期一作为每周的第一天(0 ~ 53) 
        %x   —— 月/日/年,%c的前半段
        */
        //组合写入字符串
        strLog += strTime;
        strLog += LogText;

        if(!m_FileFind.FindFile(m_sFilePath))
        {
            CreateDirectory(m_sFilePath,NULL);
        }

        if(!m_SFile.Open(m_sFilePath + _T("\\") +m_sFileName,CFile::modeReadWrite))
        {
            m_SFile.Open(m_sFilePath + _T("\\") + m_sFileName,CFile::modeCreate | CFile::modeReadWrite | CFile::typeBinary);
        }

        m_SFile.SeekToEnd(); 

        //written by jiftle 处理UNICODE下乱码
#ifdef UNICODE 
        CString strTmp = strLog;
        int len = 0;
        char *buf = NULL;
        len = WideCharToMultiByte(CP_ACP,0,strTmp,strTmp.GetLength(),NULL,0,NULL,NULL)+1;
        buf	= new char[len];
        memset(buf,0,len);
        WideCharToMultiByte(CP_ACP,0,strTmp,strTmp.GetLength(),buf,len-1,NULL,NULL);
#else
        CString strTmp = strLog;
        char *buf = NULL;
        int len=0;
        len = strTmp.GetLength()+1;//多分配一个存放结束符号
        buf = new char[len];
        memset(buf,0,len);
        buf=strTmp.GetBuffer();
#endif

        m_SFile.Write(buf,strlen(buf));
        m_SFile.Close();
    }
    catch(CFileException fileException)
    {
        return false;
    }

    return true;
}

在头文件中加入如下

class CLogFile  
{
public:
    CLogFile();
    virtual ~CLogFile();
    static CString GetFileName();
    static CString GetFilePath();
    static BOOL WriteLog(CString LogText);
};

 

本文出自:http://blog.weka.cc/cpp/vc-log/