-1
我試圖確定下面的類是功能性的跨多個C#項目如何改進此日誌類以便可以跨C#多個項目使用它?
這個類背後的想法是,它會自動生成一個日誌文件,如果一個已被編輯或刪除的程序運行時使用。
public static class Utility {
#region INTERNAL LOG CLASS
private static readonly object Lock = new object();
public static string LogFileName { get; private set; }
public static string LogFilePath { get; private set; }
public static string GetDate() => DateTime.Now.ToShortDateString();
public static string GetTime() => DateTime.Now.ToShortTimeString();
public static void CreateLog(string filename, string filepath = null) {
LogFileName = filename;
var directoryInfo = Directory.GetParent(Directory.GetCurrentDirectory()).Parent;
if (directoryInfo != null)
LogFilePath = Path.Combine(filepath ?? directoryInfo.FullName, @"files\logs\", LogFileName);
/* PUT APPROPRIATE WELCOME MESSAGE HERE */
Log($"# NEW INSTANCE OF '{System.Reflection.Assembly.GetCallingAssembly().GetName().Name}' RUNNING");
Log($"# LOG CREATED (FILENAME: {LogFileName}, FILEPATH: {LogFilePath})");
}
public static void Log(string message, int format = 0) {
lock (Lock) {
try
{
string logFormat = $"{GetDate()} @ {GetTime(),-8} | >";
if (format == 0) { message = $"{message}{Environment.NewLine}"; }
else if (format == 1) { message = $"{logFormat} ### {message}{Environment.NewLine}"; }
else if (format == 2) { message = $"{logFormat} █ERROR█ {message}{Environment.NewLine}"; }
else if (format == 3) { message = $"{logFormat} --- {message} --- {Environment.NewLine}"; }
else { message = $"{logFormat} {message}{Environment.NewLine}"; }
LogToConsole(message);
AppendAllText(LogFilePath, message);
} catch (DirectoryNotFoundException ex) {
MessageBox.Show("ERROR"); throw ex; //Count not open/create file.
}
}
}
public static void LogToConsole(string message) {
Console.WriteLine(message);
}
public static void OpenLog() {
Process.Start(new ProcessStartInfo { FileName = LogFilePath, UseShellExecute = true });
}
public static void ClearLog() {
WriteAllText(LogFilePath, string.Empty);
Log("LOG CLEARED!", 1);
}
#endregion
是否有任何問題,你可以看到我應該改變/考慮改變?
只是一個小提點 - 如果你在多個項目中使用這個你可能要考慮使用標準時區,而不是DateTime.Now - 如果你的項目託管在不同的環境或地區,那麼您的日誌記錄日期會因每個項目而異,這可能會使閱讀日誌成爲一場噩夢!也許你可以使用UTC。 – donners45
您應該使用正確的日誌框架,例如* NLog *或* log4net *。 –