乙個基於c 的log庫

2022-06-20 17:39:09 字數 3281 閱讀 3821

使用兩個快取區存放日誌,每個快取區為乙個hash表,通過執行緒id計算對應的hash值,將日誌存入對應的位置。

乙個log執行緒讀取快取區,並將其寫入log檔案,每次將兩個快取區更換,防止鎖爭用的開銷,將緩衝區的日誌寫入檔案後再次對換緩衝區,迴圈往復。

logger.h

1

#ifndef logger_h

2#define logger_h

34 #include5 #include6 #include7 #include8

9 #include10 #include11

12 #include13

14#define zlog_init_size 5

1516

#define logerr zlog::_zlog(zlog::zlogleval::error, __file__, __line__)

17#define loginfo zlog::_zlog(zlog::zlogleval::info, __file__, __line__)

18#define logwarn zlog::_zlog(zlog::zlogleval::warring, __file__, __line__)

19#define logstart(x) zlog::samplelogger::get()->start(x)

20#define logstop() zlog::samplelogger::get()->stop()

2122

namespace

zlog;

29extern

char *zloglevalmsg;

3031

32class

logger33;

5051

//logger單例類

52class

samplelogger;

5859 inline std::string gettime(void

);60

61//

log 操作類 過載<< 運算子 析構寫日誌

62class

_zlog63;

818283}

84#endif

logger.cpp

#include "

logger.h

"namespace

zlog;

//todo: 構造

logger::logger(int size = zlog_init_size) : _size(size), now(0

)

//todo: 新增日誌

void logger::add(std::string &info)

catch (int e)

ss << std::endl;

*///

新增到buf

_buf[now]->at(pos) +=info;

}//todo: 計算hash值

intlogger::_hash()

//todo: 獲取時間

inline std::string gettime(void

)

time = localtime(&(tv.tv_sec));

char systime[40

]; strftime(systime,

40, "

%y-%m-%d %h:%m:%s.

", time);

ss << systime << (int64_t)(tv.tv_usec / 1000

);

return

ss.str();

}//todo: logger執行緒

void logger::logging(std::string

logname)

f.flush();

}f.close();

}//todo: 執行logging執行緒

void logger::start(std::string

logname)

//todo: 關閉logging執行緒

void

logger::stop()

//todo: 析構

logger::~logger()

//todo: logger單例類宣告

logger *samplelogger::_logger =nullptr;

std::mutex samplelogger::m;

logger *samplelogger::get

() }

return

_logger;

}//todo: 初始化乙個log

_zlog::_zlog(zlogleval leval, std::string file, int

line)

catch (int

e) _info =ss.str();

}//todo: zlog operator <<

_zlog &_zlog::operator

<< (std::string

info)

_zlog &_zlog::operator

<< (int

info)

_zlog &_zlog::operator

<< (short

info)

_zlog &_zlog::operator

<< (long

info)

_zlog &_zlog::operator

<< (long

long

info)

_zlog &_zlog::operator

<< (char *info)

_zlog &_zlog::operator

<< (float

info)

_zlog &_zlog::operator

<< (double

info)

_zlog &_zlog::operator

<< (unsigned int

info)

_zlog &_zlog::operator

<< (unsigned long

info)

_zlog &_zlog::operator

<< (unsigned long

long

info)

//todo: ~_zlog()

_zlog::~_zlog()

}

乙個Log的工具類

由於專案是屬於專項定製,在私有網路中執行,有一天突然說程式出問題了,現場沒有自己人,無法定位問題,一臉蒙蔽。因為專案可以把崩潰日誌儲存到檔案,於是想把log日誌儲存一下,以便方便定位。public class logutils 判斷log檔案大小,file myfile new file logpa...

乙個簡單的Log類

經常在執行程式時需要在某些地方記錄log,之前想用log4net,但又感覺要附帶乙個dll,想要只帶乙個exe檔案執行,乾脆自己寫個簡單的類了。需要滿足的條件 被多個執行緒呼叫 時間的準確性不重要,知道先後關係就行 不想阻塞執行緒,畢竟幹活才是主要目的,為了不太在意時間的log而阻塞等待有點不划算。...

VC 乙個簡單的Log類

在軟體開發中,為程式建立log日誌是很必要的,它可以記錄程式執行的狀態以及出錯資訊,方便維護和除錯。下面實現了乙個簡單的log類,使用非常簡單,僅供參考。cloghelper.h header file for log information pragma once class cloghelper...