C#實(shí)現(xiàn)日志記錄功能的完整方案
在winform開發(fā)過程中,有時候會需要日志功能記錄軟件運(yùn)行情況。
本文主要介紹如何使用C#開發(fā)日記記錄模塊。
實(shí)現(xiàn)方案
整體思路就是調(diào)用日志功能方法。關(guān)于日志功能方法設(shè)計(jì)思路:
- 確認(rèn)日志文件格式和路徑
- 判斷文件和路徑是否存在,如果不存在,則創(chuàng)建對應(yīng)的文件夾和文件
- 使用using、streamwrite,將內(nèi)容寫入到文件中
另外在本項(xiàng)目中,通過控件的事件調(diào)用日志記錄功能
知識點(diǎn)
Path
對包含文件或目錄路徑信息的 String 實(shí)例執(zhí)行操作
- 方法
- path.Combine
將字符串合并到路徑中。
string filepath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Logs", "app_log.txt");
Directory
公開用于通過目錄和子目錄進(jìn)行創(chuàng)建、移動和枚舉的靜態(tài)方法。 此類不能被繼承
方法
- Exists
public static bool Exists (string? path);
path:測試的文件路徑
返回:boolean
如果 path 指向現(xiàn)有目錄,則為 true;如果該目錄不存在或者在嘗試確定指定目錄是否存在時出錯,則為 false。
- CreateDirectory
在指定路徑中創(chuàng)建所有目錄。
public static System.IO.DirectoryInfo CreateDirectory (string path);
path:要創(chuàng)建的目錄
返回:DirectoryInfo
一個表示在指定路徑的目錄的對象。 無論指定路徑的目錄是否已經(jīng)存在,都將返回此對象。
Streamwriter
實(shí)現(xiàn)一個 TextWriter,用于以特定編碼將字符寫入流。
- WriteLine
WriteLine(String):將字符串寫入流,后跟行終止符。
File
提供用于創(chuàng)建、復(fù)制、刪除、移動和打開單個文件的靜態(tài)方法,并有助于創(chuàng)建 FileStream 對象。
- CreateText
創(chuàng)建或打開用于寫入 UTF-8 編碼文本的文件。 如果文件已存在,則替換其內(nèi)容。
public static System.IO.StreamWriter CreateText (string path);
Path:要打開以進(jìn)行寫入的文件
返回:一個StreamWriter,使用UTF-8編碼寫入到指定的文件
- AppendText
創(chuàng)建一個 StreamWriter,它將 UTF-8 編碼文本追加到現(xiàn)有文件或新文件(如果指定文件不存在)。
public static System.IO.StreamWriter AppendText (string path);
Path:要向其中追加內(nèi)容的文件的路徑。
返回:StreamWriter,一個流寫入器,它將 UTF-8 編碼文本追加到指定文件或新文件。
三目運(yùn)算符
condition ? expression1 : expression2;
判斷條件是否成立,如果成立則執(zhí)行表達(dá)式1,否則執(zhí)行表達(dá)式2。
在本項(xiàng)目中,判斷文件是否存在,如果不存在,則創(chuàng)建文件,如果存在,則追加內(nèi)容
StreamWriter sw = File.Exists(filepath)? File.AppendText(filepath) : File.CreateText(filepath)
字符串拼接
string logtype=string.Empty;
string s=string.Empty;
string content=string.Empty;
content = $"[{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff}] [{logtype}]:[{s}]\r\n";
Type
在日志記錄中,需要獲取控件的類型。
- 方法
GetType()
獲取控件類型
button2.GetType().Name
返回String。
關(guān)鍵代碼
- 日志記錄功能
public class TraceLog
{
public void writelog(string s,string logtype)
{
//判斷是否文件是否存在,如果不存在,則創(chuàng)建文件
//將信息和發(fā)生時間寫入流中
//關(guān)閉文件流對象
string filepath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Logs", "app_log.txt");
string content=string.Empty;
try
{
// 確保目錄存在
string logDir = Path.GetDirectoryName(filepath);
if (!Directory.Exists(logDir)) Directory.CreateDirectory(logDir);
// using自動管理流的生命周期(退出using塊自動釋放)
// File.AppendText:等價于 FileMode.Append + Encoding.UTF8
using (StreamWriter sw = File.Exists(filepath)
? File.AppendText(filepath)
: File.CreateText(filepath))
{
// 寫入時間+信息
//string content = $"[{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff}] 操作信息:用戶執(zhí)行了XXX操作\r\n";
content = $"[{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff}] [{logtype}]:[{s}]\r\n";
sw.WriteLine(content);
}
}
catch
{
MessageBox.Show($"日志寫入失敗:{content}","錯誤",MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
- 主窗體代碼
TraceLog App_log=new TraceLog();
private void button1_Click(object sender, EventArgs e)
{
string CtrType = GetType().Name + "-" + button1.GetType().Name;
App_log.writelog(button1.Tag.ToString(), CtrType);
}
private void button2_Click(object sender, EventArgs e)
{
string CtrType = GetType().Name + "-" + button2.GetType().Name;
App_log.writelog(button2.Tag.ToString(), CtrType);
}
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if(e.KeyValue==13)
{
string CtrType = GetType().Name +"-"+ textBox1.GetType().Name;
App_log.writelog(textBox1.Tag.ToString(), CtrType);
}
}
private void textBox2_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 13)
{
string CtrType = GetType().Name+ "-" + textBox2.GetType().Name;
App_log.writelog(textBox2.Tag.ToString(), CtrType);
}
}
到此這篇關(guān)于C#實(shí)現(xiàn)日志記錄功能的完整方案的文章就介紹到這了,更多相關(guān)C#日志記錄功能內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#實(shí)現(xiàn)的簡單隨機(jī)數(shù)產(chǎn)生器功能示例
這篇文章主要介紹了C#實(shí)現(xiàn)的簡單隨機(jī)數(shù)產(chǎn)生器功能,涉及C#簡單界面布局、事件響應(yīng)及隨機(jī)數(shù)生成相關(guān)操作技巧,需要的朋友可以參考下2017-09-09
C#實(shí)現(xiàn)動態(tài)加載dll的方法
這篇文章主要介紹了C#實(shí)現(xiàn)動態(tài)加載dll的方法,涉及針對動態(tài)鏈接庫的靈活操作技巧,具有一定的參考借鑒價值,需要的朋友可以參考下2014-12-12
C#?將數(shù)據(jù)庫SqlServer數(shù)據(jù)綁定到類中的過程詳解
本文講述的是讀取數(shù)據(jù)庫中數(shù)據(jù)的常用做法,即將數(shù)據(jù)庫中的數(shù)據(jù)綁定到創(chuàng)建的類中,再將類綁定到DataGridView的數(shù)據(jù)源中的做法,對C#將SqlServer數(shù)據(jù)綁定到類中感興趣的朋友一起看看吧2022-06-06

