Ich versuche, wenn die folgende Klasse zu bestimmen, funktioniert über mehr C# -Projekten hinter dieser KlasseWie kann diese Protokollklasse verbessert werden, sodass sie in C# -Projekten verwendet werden kann?
Die Idee ist, zu verwenden, dass es automatisch eine Protokolldatei generiert, wenn ein oder gelöscht bearbeitet wurde, während das Programm läuft .
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
Gibt es irgendwelche Probleme, die Sie sehen können, die ich ändern/betrachten sollte?
Nur ein kleiner Punkt zu erwähnen - wenn Sie dies über mehrere Projekte verwenden Sie können mit einer Standard-Zeitzone zu prüfen, anstatt DateTime.Now - Wenn Ihre Projekte gehostet werden In verschiedenen Umgebungen oder Regionen variieren die Protokolldaten je nach Projekt. Dies kann Leseprotokolle zu einem Albtraum machen! Vielleicht könnten Sie stattdessen UTC verwenden. – donners45
Sie sollten wirklich ein richtiges Logging-Framework verwenden, wie * NLog * oder * log4net *. –