最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#實(shí)現(xiàn)日志記錄功能的完整方案

 更新時間:2025年12月09日 08:43:35   作者:yue008  
這篇文章主要介紹了如何在C# Winform項(xiàng)目中實(shí)現(xiàn)日志記錄功能,包括日志文件的創(chuàng)建、路徑判斷、內(nèi)容寫入、以及通過控件事件調(diào)用日志記錄的方法,需要的朋友可以參考下

在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)的支付寶支付

    c# 實(shí)現(xiàn)的支付寶支付

    這篇文章主要介紹了c# 實(shí)現(xiàn)的支付寶支付的方法,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2021-01-01
  • C#實(shí)現(xiàn)的簡單隨機(jī)數(shù)產(chǎ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#中面向?qū)ο蟮南嚓P(guān)知識

    一文帶你吃透C#中面向?qū)ο蟮南嚓P(guān)知識

    這篇文章主要為大家詳細(xì)介紹了C#中面向?qū)ο蟮南嚓P(guān)知識,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)C#有一定的幫助,需要的小伙伴可以參考一下
    2023-02-02
  • C#實(shí)現(xiàn)動態(tài)加載dll的方法

    C#實(shí)現(xiàn)動態(tài)加載dll的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)動態(tài)加載dll的方法,涉及針對動態(tài)鏈接庫的靈活操作技巧,具有一定的參考借鑒價值,需要的朋友可以參考下
    2014-12-12
  • WPF MVVM示例講解

    WPF MVVM示例講解

    WPF技術(shù)的主要特點(diǎn)是數(shù)據(jù)驅(qū)動UI,所以在使用WPF技術(shù)開發(fā)的過程中是以數(shù)據(jù)為核心的,WPF提供了數(shù)據(jù)綁定機(jī)制,當(dāng)數(shù)據(jù)發(fā)生變化時,WPF會自動發(fā)出通知去更新UI,這篇文章通過示例讓大家體驗(yàn)下WPF MVM,有需要的朋友可以參考下
    2015-08-08
  • C#中的枚舉類型(Enum)介紹

    C#中的枚舉類型(Enum)介紹

    這篇文章介紹了C#中的枚舉類型(Enum),文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • C#實(shí)現(xiàn)給圖片加水印的方法

    C#實(shí)現(xiàn)給圖片加水印的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)給圖片加水印的方法,結(jié)合完整實(shí)例形式分析了C#常見的圖片水印操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2016-02-02
  • C#中使用angular的方法步驟

    C#中使用angular的方法步驟

    在本篇內(nèi)容里我們給大家整理了關(guān)于C#中使用angular的方法以及具體步驟內(nèi)容,有興趣的朋友們學(xué)習(xí)下。
    2019-06-06
  • C#?將數(shù)據(jù)庫SqlServer數(shù)據(jù)綁定到類中的過程詳解

    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
  • C#識別出圖片里的數(shù)字和字母

    C#識別出圖片里的數(shù)字和字母

    本文給大家分享的是C#識別出圖片里的數(shù)字和字母的代碼,主要是識別以前公司的軟件注冊碼截圖里的數(shù)字和字母,功能很簡單,也存在很大的局限性,這里僅僅是分享,小伙伴們參考下。
    2015-03-03

最新評論

平顶山市| 安龙县| 玛纳斯县| 清远市| 汉阴县| 霞浦县| 桂平市| 仁化县| 双流县| 临夏市| 瓮安县| 永善县| 西安市| 板桥市| 牟定县| 工布江达县| 曲靖市| 新疆| 西丰县| 阿拉善右旗| 定襄县| 新营市| 常德市| 沧州市| 乌拉特前旗| 斗六市| 平顶山市| 富裕县| 弥渡县| 大庆市| 赫章县| 睢宁县| 天全县| 伊春市| 普宁市| 徐水县| 宜章县| 新晃| 兰西县| 盐源县| 秦皇岛市|