日誌類可以作為乙個練手專案,實現乙個好的日誌類並不容易,這裡先出第乙個版本,後期持續優化。功能簡單對於新手非常友好,歡迎指正錯誤。
該日誌類我命名為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類,主要考慮實現以下功能 為了方便的設定日誌等級,可以用乙個列舉類表示四種...