输出文本Log

来自百度文库~

头文件.h:

#pragma once
#include <strstream>

//定义宏LOG_FILE(level,…)
//该宏函数可以写带文件名、行号、时间和信息的log
#define  LOG_FILE(level,...)\
{\
    myLog *log=new myLog();\
    log->LogFileNum(__FILE__,__LINE__,level,##__VA_ARGS__); \
    delete log;\
}
//定义宏LOG_FUN(level,…)
//该宏函数可以写带模块名,时间和信息的log
#define  LOG_FUN(level,...)\
{\
    myLog *log=new myLog();\
    log->LogFunction(__FUNCTION__,level,##__VA_ARGS__); \
    delete log;\
}
//定义LOG(...)
//该宏函数写最基本的日志,与printf()一样,具体格式有用户定义;
#define  LOG(...)\
{\
    myLog *log=new myLog();\
    log->LogPrintf(##__VA_ARGS__); \
    delete log;\
}
enum E_LOG_LEVEL{
    /** fatal */    LOG_LEVEL_FATAL = 000,
    /** alert */    LOG_LEVEL_ALERT,
    /** crit */     LOG_LEVEL_CRIT,
    /** error */    LOG_LEVEL_ERROR,
    /** warn */     LOG_LEVEL_WARN,
    /** notice */   LOG_LEVEL_NOTICE,
    /** info */     LOG_LEVEL_INFO,
    /** debug */    LOG_LEVEL_DEBUG,
    /** trace */    LOG_LEVEL_TRACE,
    /** notset */   LOG_LEVEL_NOTSET,
    /** unknown */  LOG_LEVEL_UNKNOWN
};
#define LOG_ERROR LOG_LEVEL_ERROR
#define LOG_WARN  LOG_LEVEL_WARN
#define LOG_INFO  LOG_LEVEL_INFO
#define LOG_DEBUG LOG_LEVEL_DEBUG

class myLog
{
public:
    myLog(void);
    ~myLog(void);
    // 要写入log的文件名;
    char *m_szFilename;
    // 写log;
    bool WriteLog(const char * szFileName, const char * strMsg);
    // 日志接口函数;
    bool LogInfo(
        const char *strFile,
        const int &iLineNum,
        const int &iPriority,
        const char *strMsg,
        const char *strCatName
        );
    // 初始化;
    void LogInit(void);
    //带时间文件路径和行号的写日志格式;
    bool LogFileNum(
        const char *strFile,
        const int &iLineNum,
        const int &iPriority,
        const char* format,
        ...
        );
    //带时间和功能模块名的日志;
    bool LogFunction(
        const char *strFun,
        const int &iPriority,
        const char* format,
        ...
        );
    //日志内容由客户自己定义;
    bool LogPrintf(
        const char* format,
        ...
        );
};

实现文件.cpp:


/*
错误解决:
#error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version...
解决方法:右击项目-->属性-->配置属性-->常规,然后在右边的“项目默认值”中的“MFC的使用”选项中选择“在共享 DLL 中使用 MFC”,在运行,解决了。
*/

//日志的实现;
#include <iostream>
#include <afx.h>
#include "myLog.h"

const char *Level[] = { "FATAL", "ALERT", "CRIT", "ERROR", "WARN", "NOTICE", "INFO", "DEBUG", "TRACE", "NOTSET", "UNKNOWN" };

#define MAXLINSIZE 4096
myLog::myLog(void)
    :m_szFilename(NULL)
{
    LogInit();//用于初始化日志的文件名
}


myLog::~myLog(void)
{
}


// 写log;
bool myLog::WriteLog(const char * szFileName, const char * strMsg)
{

    FILE * fp = fopen(szFileName, "at+");
    if (NULL == fp)
    {
        return false;
    }
    fprintf(fp, "%s\r\n", strMsg);
    fflush(fp);
    fclose(fp);
    return TRUE;
}

// 初始化;
void myLog::LogInit(void)
{
    m_szFilename = "./log.log";

}


//带时间文件路径和行号的写日志格式;
bool myLog::LogFileNum(
    const char *strFile,
    const int &iLineNum,
    const int &iPriority,
    const char *format,
    ...
    )
{
    SYSTEMTIME systime;
    char logstr[MAXLINSIZE + 1];
    char logMsg[2 * MAXLINSIZE];

    va_list argp;
    va_start(argp, format);
    if (NULL == format || 0 == format[0])
        return false;
    _vsnprintf(logstr, MAXLINSIZE, format, argp);
    va_end(argp);

    GetLocalTime(&systime);
    sprintf(logMsg, "[%04d-%02d-%02d %02d:%02d:%02d] %s| %d |%s |%s",
        systime.wYear, systime.wMonth, systime.wDay,
        systime.wHour, systime.wMinute, systime.wSecond,
        strFile, iLineNum, Level[iPriority], logstr);

    WriteLog(m_szFilename, logMsg);

    return true;
}

//带时间和功能模块名的日志;
bool myLog::LogFunction(
    const char *strFun,
    const int &iPriority,
    const char* format,
    ...
    )
{
    SYSTEMTIME systime;
    char logstr[MAXLINSIZE + 1];
    char logMsg[2 * MAXLINSIZE];

    va_list argp;
    va_start(argp, format);
    if (NULL == format || 0 == format[0])
        return false;
    _vsnprintf(logstr, MAXLINSIZE, format, argp);
    va_end(argp);

    GetLocalTime(&systime);
    sprintf(logMsg, "[%04d-%02d-%02d %02d:%02d:%02d] %s|%s |%s",
        systime.wYear, systime.wMonth, systime.wDay,
        systime.wHour, systime.wMinute, systime.wSecond,
        strFun, Level[iPriority], logstr);

    WriteLog(m_szFilename, logMsg);
    return true;
}
//日志内容由客户自己定义;
bool myLog::LogPrintf(
    const char* format,
    ...
    )
{
    char logstr[MAXLINSIZE + 1];

    va_list argp;
    va_start(argp, format);
    if (NULL == format || 0 == format[0])
        return false;
    _vsnprintf(logstr, MAXLINSIZE, format, argp);
    va_end(argp);

    WriteLog(m_szFilename, logstr);

    return true;
}

调用:

#include "myLog.h"

LOG_FUN(LOG_LEVEL_NOTICE,"##################################################################");

或   

LOG_FILE(LOG_LEVEL_INFO, "======[ Send  Spitslot ==> %s ]=====", "your message");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值