⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 superlog.h

📁 一个性能高
💻 H
字号:
//  *************************************************************
//  Copyright (C) 2000-2009,Seuu Technologies Co., Ltd.
//  
//  File name  : SuperLog.h
//  Description: 性能要比较高,
// 能写char*,string,CString,bin
// 有线程,能主动写
// 三到四秒一次,可配的,
// 写日志可分级别,可调控的。
// 日志文件有多个,轮换写

//  Version    : 1.0
//  Author     : Seuu
//  Created    : 2009-05-04 22:54:18
//  *************************************************************

#pragma once

const int MAX_BIN_LOG_INFO_LEN = 30*1024+1;
const int MAX_STR_LOG_INFO_LEN = 3*1024+1;
const int MAX_LOG_FILE_LEN     = 5*1024*1024;
//const int MAX_LOG_FILE_LEN     = 5*1024/**1024*/;
// 日志文件最多可以写多少个
#define   MAX_LOG_FILE_COUNT   3
#define   WRITE_LOG           CSuperLog::WriteLog
#define   LOG_LEVEL_DEBUG     CSuperLog::ENUM_LOG_LEVEL_DEBUG
#define   LOG_LEVEL_RUN       CSuperLog::ENUM_LOG_LEVEL_RUN
#define   LOG_LEVEL_ERROR     CSuperLog::ENUM_LOG_LEVEL_ERROR
#define   WELCOME_LOG_INFO    _T("\r\nSuper Logger    Version 1.0\r\n")

class CSuperLog
{
private:
    // 日志写入器的状态
    enum enLogStatus
    {
        ENUM_LOG_INIT, 
        ENUM_LOG_RUN, 
        ENUM_LOG_EXITING, 
        ENUM_LOG_EXITED, 
        ENUM_LOG_INVALID,
    };

    static CRITICAL_SECTION m_csWriteLog;         // 写日志的临界变量
    static int              m_iCurLogFileSeq;     // 当前正在写入的文件序列号
    static CString          m_strWriteStrInfo;    // 待写入str
    static int              m_iWriteBinLogLen;    // 当前待写入的bin日志字节长度
    static CStdioFile*      m_pFile;              // 文件指针
    static int              m_iMaxLogFileLen;     // 单个文件最大长度

    static HANDLE           m_hThread;    // 线程句柄
    static unsigned         m_uiThreadID;  // 线程id
    static enLogStatus      m_enStatus;    // 当前log写入器的状态
    static bool             m_bRun;      // 当前log写入器是否结束
    static int              m_iLogLevel; // 当前写日志的级别
    static HANDLE           m_hMapLogFile; //映射到共享内存中
    static LPTSTR           m_psMapAddr;   //映射到共享内存到程序内存的地址

public:

    // 日志级别
    enum enLogInfoLevel
    {
        ENUM_LOG_LEVEL_DEBUG = 0, 
        ENUM_LOG_LEVEL_RUN, 
        ENUM_LOG_LEVEL_ERROR, 
    };   
    CSuperLog(void);
    ~CSuperLog(void);

    static unsigned __stdcall LogProcStart( void* pParam );

    static enLogStatus OpenLogFile();
    static int         WriteLogToFile();    
    static CString&    GetCurTimeStr();
    static int         WriteUnicodeHeadToFile(CFile * pFile);    
    static int         GetLogLevelShareMem();              // 取得当前的日志级别
    static int         SetLogLevelShareMem(int iLevel);    // 设置当前的日志级别
    static int         OperaterConfig(BOOL bSave);         // 把当前级别写到配置文件中
    static int         CheckLogLevel();                    // 从共享内存中读配置并设置当前的日志级别

    // 重载不同类型消息的写日志函数
#ifdef _DEBUG
    static int WriteLog(CString &strLog, enLogInfoLevel enLevel = ENUM_LOG_LEVEL_DEBUG, bool bForce = false);
    static int WriteLog(TCHAR* pstrLog,  enLogInfoLevel enLevel = ENUM_LOG_LEVEL_DEBUG, bool bForce = false);
    static int WriteLog(char* pszLog, int nLen, enLogInfoLevel enLevel = ENUM_LOG_LEVEL_DEBUG, bool bForce = false);
#else
    static int WriteLog(CString &strLog, enLogInfoLevel enLevel = ENUM_LOG_LEVEL_RUN, bool bForce = false);
    static int WriteLog(WCHAR* pstrLog,  enLogInfoLevel enLevel = ENUM_LOG_LEVEL_RUN, bool bForce = false);
    static int WriteLog(char* pszLog, int nLen, enLogInfoLevel enLevel = ENUM_LOG_LEVEL_RUN, bool bForce = false);
#endif
};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -