開源乙個C C 日誌類

2021-09-26 21:44:06 字數 2615 閱讀 3563

日誌類可以作為乙個練手專案,實現乙個好的日誌類並不容易,這裡先出第乙個版本,後期持續優化。功能簡單對於新手非常友好,歡迎指正錯誤。

該日誌類我命名為cclog,第乙個c是class的意思,忽略這一點的話可以叫clog。作用當然是日誌記錄,寫日誌操作是執行緒安全的,支援類似字串format的形式。

基於windows平台

// test.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include #include "clog.h"

#include int _tmain(int argc, _tchar* ar**)

需要注意的是:

初始化工作,主要是建立目錄、日誌檔案,必須只能在主線程完成-----執行緒不安全。

所有的寫操作都是執行緒安全的

資源釋放,執行緒不安全

cclog.h

#pragma once

//// author: wzy

// csdn:

// date: 2019-09-05

//#include class cclog

;

cclog.cpp

#include "stdafx.h"

#include "clog.h"

#include #include #include #include #include #include #include #include #define f_ok 0 /* check for file existence */

#define x_ok 1 /* check for execute permission. */

#define w_ok 2 /* check for write permission */

#define r_ok 4 /* check for read permission */

#define _mutex_start_ dword d = waitforsingleobject(m_hmutex, infinite); \

if(d != wait_object_0 ) return;

#define _mutex_end_ releasemutex(m_hmutex);

//初始化

cclog *cclog::s_log = null;

cclog::cclog(void):m_hfile(null),m_szfilename(null),m_szformatbuff(null)

cclog::~cclog(void)

bool cclog::initclog( const char *szdstdir )

//create file

srand((unsigned int)time(null));

int nrand = rand();

time_t nnowtime = time(0);

tm* nowtm = localtime(&nnowtime);

char szbuff[90] = "\0";

strftime(szbuff, sizeof(szbuff) - 1, "%y_%m_%d__%h_%m_%s", nowtm);

char szbuff2[30] = "\0";

sprintf(szbuff2,"_%d.log",nrand%10000);

strcat(szbuff,szbuff2);

if(s_log) delete s_log;

s_log = new cclog;

int nlen = strlen(szdstdir);

assert(nlen+strlen(szbuff)<399);

strcpy(s_log->m_szfilename,szdstdir);

if(s_log->m_szfilename[nlen-1] != '/' && s_log->m_szfilename[nlen-1] != '\\' )

strcat(s_log->m_szfilename,szbuff);

s_log->m_hfile = fopen(s_log->m_szfilename,"a");

assert(s_log);

if(!s_log->m_hfile)

return false;

fputs("###powered by clog###",s_log->m_hfile);

return true;

}bool cclog::closeclog()

return true;

}void cclog::writelog(const char *szinfo) const

_mutex_end_

}void cclog::writelogformat(const char *szformat,...) const

_mutex_end_

}const cclog &cclog::instance()

C 實現乙個日誌類

c 沒有貌似自帶的日誌類,如果僅僅使用cout輸出除錯資訊的話比較凌亂,所以我嘗試自己實現了乙個logger類,主要考慮實現以下功能 為了方便的設定日誌等級,可以用乙個列舉類表示四種日誌等級,同理用乙個列舉類表示三種輸出目標 enum log level 日誌等級 enum log target 日...

乙個簡單的日誌類

放乙個以前做的,一直用著的日誌類。比較短,也不用碼很多字去說明,如下 1 2 日誌類 log.cs34 5 用法 6 ningtao.log mylog new ningtao.log 日誌名稱 7 mylog.addlog 日誌資訊 8 新增一條日誌時 9 目錄結構 日誌名稱 年月 日.log 1...

C 實現乙個日誌類

我們可能遇到發包後,在客戶機器上出現各種未知錯誤,如果沒有日誌列印,對於問題解決是很困難的,因此常規的解決辦法就是列印日誌。在此用c 實現乙個簡單的日誌類,使用cout輸出除錯資訊,同時把日誌寫到檔案中,實現了乙個logger類,主要考慮實現以下功能 為了方便的設定日誌等級,可以用乙個列舉類表示四種...