[C#] 紀錄檢視訊息 Log檔案的讀寫 及 取得程式執行的根目錄

[C#] 紀錄檢視訊息 Log檔案的讀寫 及 如何取得目前程式執行的根目錄

為了讓軟體比較好維護 通常要加入Log來記錄軟體訊息

就做一個最簡單的Log寫入功能吧

首先 先建立一個類別 LogRecord

using System;
using System.IO;
using System.Windows.Forms;

然後加入寫入功能

我是以每天記錄一個檔案來做區分

public static void WriteLog(string message)
        {
            string DIRNAME = AppDomain.CurrentDomain.BaseDirectory + @"\Log\";
            string FILENAME = DIRNAME + DateTime.Now.ToString("yyyyMMdd") + ".txt";

            if (!Directory.Exists(DIRNAME))
                Directory.CreateDirectory(DIRNAME);

            if (!File.Exists(FILENAME))
            {
                // The File.Create method creates the file and opens a FileStream on the file. You neeed to close it.
                File.Create(FILENAME).Close();
            }
            using (StreamWriter sw = File.AppendText(FILENAME))
            {
                Log(message, sw);
            }
        }

private static void Log(string logMessage, TextWriter w)
        {
            w.Write("\r\nLog Entry : ");
            w.WriteLine("{0} {1}", DateTime.Now.ToLongTimeString(), DateTime.Now.ToLongDateString());
            w.WriteLine("  :");
            w.WriteLine("  :{0}", logMessage);
            w.WriteLine("-------------------------------");
        }

如果是使用在Windows Form專案中 DIRNAME 要改為

string DIRNAME = Application.StartupPath + @"\Log\";

順便紀錄一下如何取得目前程式執行的根目錄

asp.net
string path = Server.MapPath("/");

Windows Form
string path = Application.StartupPath ;

Console Application
string path=System.AppDomain.CurrentDomain.BaseDirectory;

DLL Library 中取得目前該專案的根目錄
string path=System.AppDomain.CurrentDomain.BaseDirectory;

接著要做如何使用讀取LOG檔

在LogRecord中再加入以下程式碼

public static void ReadLog(string Date_yyyyMMdd)
        {
            string DIRNAME = AppDomain.CurrentDomain.BaseDirectory + @"\Log\";
            string FILENAME = DIRNAME + Date_yyyyMMdd + ".txt";

            if (File.Exists(FILENAME))
            {
                using (StreamReader r = File.OpenText(FILENAME))
                {
                    DumpLog(r);
                }
            }
            else
            {
                Console.WriteLine(Date_yyyyMMdd + ": No Data!");
            }
        }

private static void DumpLog(StreamReader r)
        {
            string line;
            while ((line = r.ReadLine()) != null)
            {
                Console.WriteLine(line);
            }
        }

使用方法如下 (日期是20161208)

    class Program
    {
        static void Main(string[] args)
        {
            LogRecord.WriteLog("Test Message: Welecom to C#!");
            LogRecord.ReadLog("20161208");
            LogRecord.ReadLog("20161209");

            Console.ReadKey();
        }
    }

結果(執行第三次 所以有三筆)

 

 

新手發文,有謬誤請告知,也請多多指教。