Weil ich eine Logging-Bibliothek mit einigen Funktionen brauche, arbeite ich an meiner eigenen.
Herunterladen
NuGet: https://www.nuget.org/packages/Logging.Net/
Sourcecode: https://github.com/Dalk-GitHub/Logging.Net
Dokumentation
1. Klassen importieren
Um Logging.Net zu benutzen, muss man die Klassen importieren.
using Logging.Net;
2. Loggertypen
In Logging.Net gibt es verschiedene Designs für Logausgaben.
2.1. Blazor ähnlicher Logger
// use a blazor like logger
Logger.UseMBLogger();
2.2. log4j ähnlicher Logger
// use a log4j like logger
Logger.UseSBLogger();
3. Logdateien
Logging.Net bietet auch Funktionen, um die Logausgaben in eine Datei zu schreiben.
3.1. Normale Logdatei
// the logs should be written to a file
Logger.LogToFile("log.log");
3.2. HTML Logdatei
Information: Eine HTML Logdatei verbracht pro Logausgabe ca. 650 Bytes zusätzlich für die Darstellung
// the logs should be written to a html file
Logger.LogToHtmlFile("log.html");
4. Logstufen
In Logging.Net gibt es die Logstufen Debug, Info, Warn und Error, die man auch einzeln deaktivieren kann.
4.1. Debug
Ausgabe auf Debug:
// log a message as debug
Logger.Debug("A debug log message...");
Ausgabe von Debug deaktivieren:
// disable debug logging
Logger.DisableDebug = true;
4.2. Info
Ausgabe auf Info:
// log a message as info
Logger.Log("A log message...");
oder
// Logger.Info(message) == Logger.Log(message)
Logger.Info("Another log message...");
Ausgabe von Info deaktivieren:
// disable info logging
Logger.DisableInfo = true;
4.3. Warn
Ausgabe auf Warn:
// log a message as warning
Logger.Warn("A warning message...");
Ausgabe von Warn deaktivieren:
// disable logging warnings
Logger.DisableWarn = true;
4.4. Error
Ausgabe auf Error:
// log a message as an error
Logger.Error("A error message..");
Ausgabe von Error deaktivieren:
// disable logging errors
Logger.DisableError = true;
5. Statusausgabe für Tasks
Weil eine Statusausgabe für Tasks auch oft benötigt wird, habe ich mich entschlossen, eine zu schreiben. Der Parameter task des Typs Action gibt den Code an, der mit einer Logausgabe ausgeführt werden soll und ist erforderlich. Der Parameter name des Typs String gibt den angezeigten Name des Tasks an. Dieser muss nicht gesetzt werden, aber es wird empfohlen diesen zu setzen. Der Parameter took des Typs Boolean gibt an, ob angezeigt werden soll, wie lange der Task gebraucht hat, um vollständig ausgeführt zu werden. Angezeigt wird es mit true , mit false nicht.
Syntax:
// task: Action
// name: String
// took: Boolean
ConsoleHelper.Run(task, name, took);
Beispiel:
ConsoleHelper.Run(() =>
{
Logger.Info("Before sleep");
Logger.Debug("Sleeping 1000ms");
Thread.Sleep(1000);
Logger.Info("After sleep");
}, "Test", true);
Ausgabe:
6. Tools für die Konsole
Weil ich öfters folgende Tools benötige, habe ich diese in Logging.Net eingebaut.
6.1. Zeile füllen
Der Parameter chr der Typs String gibt das Zeichen an, mit dem die Zeile gefüllt werden soll. Der Parameter color des Typs ConsoleColor gibt die Farbe an, in der das Zeichen die Zeile füllen soll und ist nicht erforderlich.
Syntax:
// chr: String
// color: ConsoleColor
ConsoleHelper.LineOfChar(chr, color).Write();
Beispiel:
// write a line of "="
ConsoleHelper.LineOfChar("=", System.ConsoleColor.Yellow).Write();
Ausgabe:
6.2. Zentrieren
Der Parameter text des Typs String gibt den Text an, der zentriert werden soll. Der optionale Parameter fill des Typs String gibt das Zeichen an, mit dem der Freie Platz in dieser Zeile der Konsole gefüllt werden soll. Der ebenfalls optionale Parameter color des Typs ConsoleColor gibt die Farbe an, mit der die Zeile dargestellt werden soll.
Syntax:
// text: String
// fill: String
// color: ConsoleColor
ConsoleHelper.Center(text, fill, color).Write();
Beispiel:
// write "Hello World" centered between a lot of "="
ConsoleHelper.Center("Hello World", "=", System.ConsoleColor.Red).Write();
Ausgabe:
Beispiele
Hier gibt es noch ein paar Beispiele zu oben nicht dokumentierten Sachen.
Nachrichtenverarbeitung
Eigene Verarbeitungsklasse:
public class MyAddition : ILoggingAddition
{
///
///
///
/// message
/// color of the message
public void ProcessMessage(string s, ConsoleColor color)
{
DoSomething(s);
}
}
Eigene Verarbeitungsklasse Benutzen:
// use MyAddition to process the log messages
Logger.UsedLogger = new MyAddition();
Eigene Logstufenkonfiguration
Klasse:
///
/// my color configuration
///
public class MyConfiguration : LoggingConfiguration
{
///
/// constructor with default values
///
public MyConfiguration() : base(ConsoleColor.Green, new PrefixAction((time) =>
{
return "[MyName] " + time + " ";
}),
new PrefixAction(() =>
{
return "[" + FormatInteger(DateTime.Now.Hour) + ":" + FormatInteger(DateTime.Now.Minute)
+ ":" + FormatInteger(DateTime.Now.Second) + "]";
}))
{
}
private static string FormatInteger(int i)
{
if (i.ToString().Length > 1)
return i.ToString();
return "0" + i.ToString();
}
}
Eigener Logger
Klasse:
///
/// my logger
///
public class MyLogger : ILogger
{
///
/// configuration for debug logs
///
public LoggingConfiguration DebugConfiguration { get; set; } = new MyConfiguration();
///
/// configuration for info logs
///
public LoggingConfiguration InfoConfiguration { get; set; } = new MyConfiguration();
///
/// configuration for warn logs
///
public LoggingConfiguration WarnConfiguration { get; set; } = new MyConfiguration();
///
/// configuration for error logs
///
public LoggingConfiguration ErrorConfiguration { get; set; } = new MyConfiguration();
///
/// additional logging operation
///
public ILoggingAddition Addition { get; set; } = new NoAddition();
private void LogForConfiguration(LoggingConfiguration c, string s)
{
var m = c.GetPrefix(c.GetTimePrefix()) + s;
MyWrite(m, c.Color);
Addition.ProcessMessage(m, c.Color);
}
///
/// logs a string as debug
///
/// string to log
public void Debug(string s)
{
LogForConfiguration(DebugConfiguration, s);
}
///
/// logs a string as error
///
/// string to log
public void Error(string s)
{
LogForConfiguration(ErrorConfiguration, s);
}
///
/// gets addition
///
/// addition
public ILoggingAddition GetAddition()
{
return Addition;
}
///
/// gets debug configuration
///
/// debug configuration
public LoggingConfiguration GetDebugConfiguration()
{
return DebugConfiguration;
}
///
/// gets error configuration
///
/// error configuration
public LoggingConfiguration GetErrorConfiguration()
{
return ErrorConfiguration;
}
///
/// gets info configuration
///
/// info configuration
public LoggingConfiguration GetInfoConfiguration()
{
return InfoConfiguration;
}
///
/// gets warn configuration
///
/// warn configuration
public LoggingConfiguration GetWarnConfiguration()
{
return WarnConfiguration;
}
///
/// logs a string as info
///
/// string to log
public void Info(string s)
{
LogForConfiguration(InfoConfiguration, s);
}
///
/// sets addition
///
/// new value
public void SetAddition(ILoggingAddition addition)
{
Addition = addition;
}
///
/// sets new debug configuration
///
/// new value
public void SetDebugConfiguration(LoggingConfiguration configuration)
{
DebugConfiguration = configuration;
}
///
/// sets new error configuration
///
/// new value
public void SetErrorConfiguration(LoggingConfiguration configuration)
{
ErrorConfiguration = configuration;
}
///
/// sets new info configuration
///
/// new value
public void SetInfoConfiguration(LoggingConfiguration configuration)
{
InfoConfiguration = configuration;
}
///
/// sets new warn configuration
///
/// new value
public void SetWarnConfiguration(LoggingConfiguration configuration)
{
WarnConfiguration = configuration;
}
///
/// logs a string as warn
///
/// string to log
public void Warn(string s)
{
LogForConfiguration(WarnConfiguration, s);
}
}
Verwenden:
// use MyLogger for Logging
Logger.UsedLogger = new MyLogger();
Von Daniel Balk
![]() |
Ich entwickle in meiner Freizeit größtenteils Software, unter anderem auch diese Seite, für mich selbst oder auch für Endelon Hosting, einem Hoster, der es sich zum Ziel gesetzt hat, seine Kunden mit kostenlosen Gameservern bei ihren Projekten zu unterstützen, bei dem ich mich auch aktiv im Kundensupport beteilige. |