C#實(shí)現(xiàn)程序單例日志輸出功能
對(duì)于一個(gè)完整的程序系統(tǒng),一個(gè)日志記錄是必不可少的??梢杂盟鼇碛涗洺绦蛟谶\(yùn)行過程中的運(yùn)行狀態(tài)和報(bào)錯(cuò)信息。比如,那些不想通過彈框提示的錯(cuò)誤,程序執(zhí)行過程中捕獲的異常等。
首先,在你的解決方案中,適當(dāng)?shù)哪夸浿行陆ㄒ粋€(gè)類,比如 LogManager:
編寫如下代碼:
/// <summary>
/// 日志管理
/// </summary>
public class LogManager
{
private string _logDir; // 日志文件存放目錄
private static LogManager m_LogInstance; // 靜態(tài)單例對(duì)象
// 靜態(tài)構(gòu)造函數(shù)
static LogManager()
{
m_LogInstance = new LogManager();
}
// 私有構(gòu)造函數(shù)(必備函數(shù),不允許外部對(duì)該類進(jìn)行實(shí)例化)
private LogManager()
{
_logDir = Environment.CurrentDirectory + "\\Log";
this.DelOldFile();
}
/// <summary>
/// 屬性獲取單例對(duì)象
/// </summary>
public static LogManager LogInstance
{
get { return m_LogInstance; }
}
/// <summary>
/// 寫入一條日志記錄
/// </summary>
/// <param name="pLog">日志記錄內(nèi)容</param>
public void WriteLog(string pLog)
{
lock (this._logDir) //排它鎖:防止主程序中出現(xiàn)多線程同時(shí)訪問同一個(gè)文件出錯(cuò)
{
// 根據(jù)時(shí)間創(chuàng)建一個(gè)日志文件
var vDT = DateTime.Now;
string vLogFile = string.Format("{0}\\Log{1}{2}{3}.log",_logDir,vDT.Year,vDT.Month,vDT.Day);
// 創(chuàng)建文件流,用于寫入
using (FileStream fs = new FileStream(vLogFile, FileMode.Append))
{
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine("{0} >> {1}", vDT.ToString("yyyy-MM-dd HH:mm:ss"), pLog);
sw.Flush();
sw.Close();
fs.Close();
}
}
}
// 刪除過期文件
private void DelOldFile()
{
// 遍歷指定文件夾下所有子文件,將一定期限前的日志文件刪除。
if (!Directory.Exists(this._logDir))
{
// 如果文件夾目錄不存在
Directory.CreateDirectory(this._logDir);
return;
}
var vFiles = (new DirectoryInfo(this._logDir)).GetFiles();
for (int i = vFiles.Length - 1; i >= 0; i--)
{
// 指定條件,然后刪除
if (vFiles[i].Name.Contains("Log"))
{
if ((DateTime.Now - vFiles[i].LastWriteTime).Days > 7)
{
vFiles[i].Delete();
}
}
}
}
} // end class
其中,第8行-第26行是關(guān)于實(shí)現(xiàn)單例模式的一種方法。這樣,在你程序的需要位置執(zhí)行:
LogManager.LogInstance.WriteLog("產(chǎn)生了一條日志記錄");
就會(huì)在指定文件中參數(shù)一條日志記錄了。
即:2016-11-23 23:53:45 >> 產(chǎn)生了一條日志記錄
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- C#打印日志的方法總結(jié)
- c#快速寫本地日志方法
- 使用C#實(shí)現(xiàn)寫入系統(tǒng)日志
- C#中四步輕松使用log4net記錄本地日志的方法
- C#控制臺(tái)程序使用Log4net日志組件詳解
- C#實(shí)現(xiàn)寫系統(tǒng)日志的方法
- C#實(shí)現(xiàn)將程序運(yùn)行信息寫入日志的方法
- C#實(shí)現(xiàn)將日志寫入文本文件的方法
- C#實(shí)現(xiàn)Log4Net日志分類和自動(dòng)維護(hù)實(shí)例
- C# 微信支付 wx.chooseWXPay 簽名錯(cuò)誤的解決方法
- C#中調(diào)用DLL時(shí)未能加載文件或程序集錯(cuò)誤的處理方法(詳解)
- C# httpwebrequest訪問HTTPS錯(cuò)誤處理方法
- C# 如何添加錯(cuò)誤日志信息
相關(guān)文章
C#使用Objects?Comparer進(jìn)行對(duì)象比較
本文主要介紹了C#使用Objects?Comparer進(jìn)行對(duì)象比較,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
C# 中屬性PropertyInfo的setvalue用法說明
這篇文章主要介紹了C# 中屬性PropertyInfo的setvalue用法說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-01-01
C#實(shí)現(xiàn)位圖轉(zhuǎn)換成圖標(biāo)的方法
這篇文章主要介紹了C#實(shí)現(xiàn)位圖轉(zhuǎn)換成圖標(biāo)的方法,可實(shí)現(xiàn)將bmp格式位圖轉(zhuǎn)換成ico格式圖標(biāo)的功能,需要的朋友可以參考下2015-06-06
C#操作IIS程序池及站點(diǎn)的創(chuàng)建配置實(shí)現(xiàn)代碼
最近在做一個(gè)WEB程序的安裝包;對(duì)一些操作IIS進(jìn)行一個(gè)簡單的總結(jié);主要包括對(duì)IIS進(jìn)行站點(diǎn)的新建以及新建站點(diǎn)的NET版本的選擇,還有針對(duì)IIS7程序池的托管模式以及版本的操作2013-03-03
c#反射機(jī)制學(xué)習(xí)和利用反射獲取類型信息
反射(Reflection)是.NET中的重要機(jī)制,通過放射,可以在運(yùn)行時(shí)獲得.NET中每一個(gè)類型(包括類、結(jié)構(gòu)、接口和枚舉等)的成員,包括方法、屬性、事件,以及構(gòu)造函數(shù)等,還可以獲得每個(gè)成員的名稱、限定符和參數(shù)等,有了反射,即可對(duì)每一個(gè)類型了如指掌2014-01-01
c#根據(jù)文件類型獲取相關(guān)類型圖標(biāo)的方法代碼
c#根據(jù)文件類型獲取相關(guān)類型圖標(biāo)的方法代碼,需要的朋友可以參考一下2013-05-05

