[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();
}
}
結果(執行第三次 所以有三筆)
新手發文,有謬誤請告知,也請多多指教。