简单易用的C++日志类

#pragma once

#include "SDKDefine.h"
#include "AX_Mutex.h"

//////////////////////////////////////////////////////////////////////////
enum LogLevel
{
LogLevel_All,
LogLevel_Debug,
LogLevel_Info,
LogLevel_Warn,
LogLevel_Error,
LogLevel_Fatal,
LogLevel_Off
};

extern char* strLogLevel[];

class Logger
{
DECLARE_SINGLETON(Logger);
public:
void SetMinLevel(LogLevel minLevel);
LogLevel GetMinLevel() const;

void SetLogInfo(LogLevel level, char* file, int line);

virtual void WriteLog(const char* format, ...);

private:
Logger();

LogLevel m_minLevel;//日志级别开关, 表示高于此级别的日志才允许被记录
//临时信息
char*    m_file;
int      m_line;
LogLevel m_level;
AX_Mutex m_mutex;
};

//////////////////////////////////////////////////////////////////////////
#define LOG_SET_LEVEL(minLevel) Logger::Instance()->SetMinLevel(minLevel)
#define LOG_GET_LEVEL           Logger::Instance()->GetMinLevel()
#define LOG_RELEASE             Logger::Release()

#define LOG_DEBUG Logger::Instance()->SetLogInfo(LogLevel_Debug, __FILE__, __LINE__); Logger::Instance()->WriteLog
#define LOG_INFO Logger::Instance()->SetLogInfo(LogLevel_Info, __FILE__, __LINE__); Logger::Instance()->WriteLog
#define LOG_WARN Logger::Instance()->SetLogInfo(LogLevel_Warn, __FILE__, __LINE__); Logger::Instance()->WriteLog
#define LOG_ERROR Logger::Instance()->SetLogInfo(LogLevel_Error, __FILE__, __LINE__); Logger::Instance()->WriteLog
#define LOG_FATAL Logger::Instance()->SetLogInfo(LogLevel_Fatal, __FILE__, __LINE__); Logger::Instance()->WriteLog

/////////////////////////////////////////////////////////

//cpp

#include "Logger.h"
#include <stdio.h>
#include <time.h>
#include <stdarg.h>

char* strLogLevel[] =
{
"All",
"Debug",
"Info",
"Warn",
"Error",
"Fatal",
"Off"
};

IMPLEMENT_SINGLETON(Logger);

Logger::Logger() : m_minLevel(LogLevel_All)
{

}

void Logger::SetMinLevel( LogLevel minLevel )
{
m_minLevel = minLevel;
}

LogLevel Logger::GetMinLevel() const
{
return m_minLevel;
}

void Logger::SetLogInfo( LogLevel level, char* file, int line )
{
m_mutex.acquire();
m_level = level;
m_file = file;
m_line = line;
}

void Logger::WriteLog( const char* format, ... )
{
if (m_level >= m_minLevel)
{
   fprintf(stderr, "\n==================Log Begin====================\n");

   char str[30];
   time_t now = time(NULL);
   struct tm datetime = {0};  
   localtime_s(&datetime, &now);
   _snprintf_s(str, 30, 30, "%d-%02d-%02d %02d:%02d:%02d",datetime.tm_year+1900,datetime.tm_mon+1,datetime.tm_mday,datetime.tm_hour,datetime.tm_min,datetime.tm_sec);

   fprintf(stderr, "%s %d \n%s [%s]\n", m_file, m_line, str, strLogLevel[m_level]);

   va_list argp;
   va_start(argp, format);
   vfprintf (stderr, format, argp);
   va_end(argp);
   fprintf(stderr, "\n------------------Log End----------------------\n");
}
m_mutex.release();
}

类别:c++ 查看评论

原文链接: https://www.cnblogs.com/joeguo/archive/2010/09/03/1889241.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    简单易用的C++日志类

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/14635

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月7日 下午2:20
下一篇 2023年2月7日 下午2:22

相关推荐