【发布时间】:2016-07-27 11:06:15
【问题描述】:
我正在尝试确定以下类是否可以跨多个 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。
-
您应该真正使用适当的日志框架,例如 NLog 或 log4net。