經常在執行程式時需要在某些地方記錄log,之前想用log4net,但又感覺要附帶乙個dll,想要只帶乙個exe檔案執行,乾脆自己寫個簡單的類了。
需要滿足的條件:被多個執行緒呼叫;時間的準確性不重要,知道先後關係就行;不想阻塞執行緒,畢竟幹活才是主要目的,為了不太在意時間的log而阻塞等待有點不划算。
然後開始:1.需要靜態類,預設儲存在當前目錄下,可指定log檔名;2.需要乙個用來寫入到檔案的方法。
publicstatic
class
logwriter
}}
然後,直接寫的話會存在同時訪問的問題,在不使用鎖進行阻塞的前提下,這裡使用兩個list儲存訊息佇列,並用乙個bool變數uselist1來標識當前儲存到的list,當儲存list1的時候,建立執行緒將list2中的內容寫入到log並清除list2中的訊息,然後取反uselist1,將訊息儲存到list2佇列,此時將list1中的訊息寫入log並清除list1中的訊息,最後檢查list1和list2中是否還有訊息,如果有則繼續寫入。
static list list1 = new list();static list list2 = new list();
static
bool uselist1 = false
;static
bool isused = false
;public
static
void writeline(string str) //
將訊息放進list中
else
if (!isused) //
如果沒開啟執行緒,則開啟執行緒
}private
static
void writelist() //
將list中的訊息寫入log
else
isclear();
//檢查在寫入log期間是否有新增訊息,如果有則繼續寫
isused = false
; }
private
static
void write(list list) //
將list中的訊息寫入log檔案
}public
static
void isclear() //
檢查是否list1和list2中是否還有訊息未寫入
}
實踐發現寫log頻率高的時候的確log訊息會滯後幾秒,應該是頻繁建立執行緒和頻繁的開啟和關閉檔案造成的。可以建立乙個執行緒等待訊息,增加乙個list計數,當list中訊息達到一定數量的時候再開啟檔案寫入log,減少檔案的開啟和操作次數,不過對於只是偶爾看看狀態用的log,不折騰了。。。
VC 乙個簡單的Log類
在軟體開發中,為程式建立log日誌是很必要的,它可以記錄程式執行的狀態以及出錯資訊,方便維護和除錯。下面實現了乙個簡單的log類,使用非常簡單,僅供參考。cloghelper.h header file for log information pragma once class cloghelper...
乙個Log的工具類
由於專案是屬於專項定製,在私有網路中執行,有一天突然說程式出問題了,現場沒有自己人,無法定位問題,一臉蒙蔽。因為專案可以把崩潰日誌儲存到檔案,於是想把log日誌儲存一下,以便方便定位。public class logutils 判斷log檔案大小,file myfile new file logpa...
乙個簡單的矩陣類
原 核心部分來自 的 我在其基礎上做了一點改動,加上了一些運算,同時也發現了 的一點小問題。類是基於stl裡的valarray的,因為主要是用來演示演算法用的,所以沒有對效率做過多的考慮。valarray 本身給我們提供了很多方便的運算,因為,我基本都是用的valarray的演算法,沒有重寫。不過,...