Kürzest mögliche Logging-Klasse

Aufgabenstellung:

Ihr wollt aus einem (Windows-)Programm heraus Texte in eine Datei protokollieren, z.B. zum Zweck der Fehlersuche.

Mögliche Lösung:

Wenn Ihr mal nicht extra ein Logging-Framework à la NLog oder log4net installieren möchtet, sondern einfach nur eine kurze Möglichkeit braucht, Text in eine Logdatei zu schreiben, dann ist das hier meine Wahl:

namespace Helper
{
    using System;
    using System.IO;
    using System.Reflection;
 
    /// <summary>
    /// The shortest possible logger.
    /// </summary>
    public static class QuickLogger
    {
        private static readonly Lazy<string> LogFilePath = new Lazy<string>(() =>
        {
            var folderPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
            var fileName = Path.ChangeExtension(Path.GetFileName(Assembly.GetEntryAssembly().Location), @".log");
 
            return Path.Combine(folderPath, fileName);
        });
 
        public static void Log(string text, params object[] args)
        {
            if (!string.IsNullOrEmpty(text))
            {
                var msg = string.Format(@"[{0}, {1}\{2}] {3}" + Environment.NewLine,
                    DateTime.Now,
                    Environment.UserDomainName,
                    Environment.UserName,
                    string.Format(text, args));
 
                File.AppendAllText(LogFilePath.Value, msg);
            }
        }
    }
}

(Original)

Beschreibung:

Die Klasse erstellt eine Protokollierungs-Datei direkt im Ordner der Programmdatei mit dem Namen des aktuell laufenden Programms.

Das Ganze eignet sich also primär zu Testzwecken, oder wenn das Programm nicht im Windows-Programme-Ordner liegt, da normale Benutzer keine Schreibrechte im Programme-Ordner haben.

Wenn der QuickLogger auch noch gleichzeitig in die Konsole protokollieren soll (sinnvollerweise in einer Konsolen-Anwendung), einfach in die Log-Funktion noch folgendes einfügen:

Console.WriteLine(text, args);