From ca5a4830c8c02d1b82d4aef7d8b610dc9afdc098 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Wed, 5 Oct 2022 18:13:29 +0200 Subject: [PATCH] made it easier to change the default log formatter --- ExtremelySimpleLogger/ConsoleSink.cs | 2 +- ExtremelySimpleLogger/DirectorySink.cs | 2 +- ExtremelySimpleLogger/FileSink.cs | 2 +- ExtremelySimpleLogger/Logger.cs | 47 ++++++++++++++++++++- ExtremelySimpleLogger/Sink.cs | 58 +++----------------------- ExtremelySimpleLogger/StringSink.cs | 2 +- 6 files changed, 56 insertions(+), 57 deletions(-) diff --git a/ExtremelySimpleLogger/ConsoleSink.cs b/ExtremelySimpleLogger/ConsoleSink.cs index 6d5aa53..36d89d6 100644 --- a/ExtremelySimpleLogger/ConsoleSink.cs +++ b/ExtremelySimpleLogger/ConsoleSink.cs @@ -47,7 +47,7 @@ namespace ExtremelySimpleLogger { } /// - /// Logs the given message, which has already been formatted using . + /// Logs the given message, which has already been formatted using or . /// /// The logger that the message was passed to /// The importance level of this message diff --git a/ExtremelySimpleLogger/DirectorySink.cs b/ExtremelySimpleLogger/DirectorySink.cs index 4ca6dcd..3563d74 100644 --- a/ExtremelySimpleLogger/DirectorySink.cs +++ b/ExtremelySimpleLogger/DirectorySink.cs @@ -85,7 +85,7 @@ namespace ExtremelySimpleLogger { } /// - /// Logs the given message, which has already been formatted using . + /// Logs the given message, which has already been formatted using or . /// /// The logger that the message was passed to /// The importance level of this message diff --git a/ExtremelySimpleLogger/FileSink.cs b/ExtremelySimpleLogger/FileSink.cs index e708402..987b4f3 100644 --- a/ExtremelySimpleLogger/FileSink.cs +++ b/ExtremelySimpleLogger/FileSink.cs @@ -65,7 +65,7 @@ namespace ExtremelySimpleLogger { } /// - /// Logs the given message, which has already been formatted using . + /// Logs the given message, which has already been formatted using or . /// /// The logger that the message was passed to /// The importance level of this message diff --git a/ExtremelySimpleLogger/Logger.cs b/ExtremelySimpleLogger/Logger.cs index edd9644..fd45e3c 100644 --- a/ExtremelySimpleLogger/Logger.cs +++ b/ExtremelySimpleLogger/Logger.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Text; namespace ExtremelySimpleLogger { /// @@ -18,11 +19,16 @@ namespace ExtremelySimpleLogger { /// public LogLevel MinimumLevel { get; set; } = LogLevel.Trace; /// + /// The with which log messages should be formatted by a if its is . + /// By default, is used. + /// + public LogFormatter DefaultFormatter { get; set; } = Logger.FormatDefault; + /// /// If this property is set to false, this logger will not log any messages. /// public bool IsEnabled { get; set; } = true; /// - /// The name of this logger. This name is used in by default. + /// The name of this logger. This name is used in by default. /// public string Name { get; set; } @@ -97,5 +103,44 @@ namespace ExtremelySimpleLogger { sink.Dispose(); } + /// + /// The default formatter for logging messages, which is 's initial value. + /// By default, messages are laid out as follows: + /// + /// [Date and time] [Logger name, if set] [Log level] Message + /// Exception, if set + /// + /// + /// The logger that the message was passed to + /// The importance level of this message + /// The message + /// An optional exception whose stack trace will be appended to the message + /// A formatted string to log + public static string FormatDefault(Logger logger, LogLevel level, object message, Exception e = null) { + var builder = new StringBuilder(); + // date + builder.Append($"[{DateTime.Now}] "); + // logger name + if (!string.IsNullOrEmpty(logger.Name)) + builder.Append($"[{logger.Name}] "); + // log level + builder.Append($"[{level}] "); + // message + builder.Append(message); + // stack trace + if (e != null) + builder.Append($"\n{e}"); + return builder.ToString(); + } + } + + /// + /// A delegate method used by and . + /// + /// The logger that the message was passed to + /// The importance level of this message + /// The message + /// An optional exception whose stack trace will be appended to the message + public delegate string LogFormatter(Logger logger, LogLevel level, object message, Exception e = null); } \ No newline at end of file diff --git a/ExtremelySimpleLogger/Sink.cs b/ExtremelySimpleLogger/Sink.cs index be1ebbe..4b2bd2f 100644 --- a/ExtremelySimpleLogger/Sink.cs +++ b/ExtremelySimpleLogger/Sink.cs @@ -12,8 +12,8 @@ namespace ExtremelySimpleLogger { /// public LogLevel MinimumLevel { get; set; } = LogLevel.Trace; /// - /// The with which this message should be formatted. - /// By default, is used. + /// The with which log messages should be formatted. + /// is used if this is . /// public LogFormatter Formatter { get; set; } /// @@ -21,13 +21,6 @@ namespace ExtremelySimpleLogger { /// public bool IsEnabled { get; set; } = true; - /// - /// Initializes a new sink with the default settings. - /// - public Sink() { - this.Formatter = this.FormatDefault; - } - /// /// Logs a message in the way specified by the sink's implementation. /// @@ -36,61 +29,22 @@ namespace ExtremelySimpleLogger { /// The message /// An optional exception whose stack trace will be appended to the message public virtual void Log(Logger logger, LogLevel level, object message, Exception e = null) { - this.Log(logger, level, this.Formatter.Invoke(logger, level, message, e)); + var formatter = this.Formatter ?? logger.DefaultFormatter; + this.Log(logger, level, formatter.Invoke(logger, level, message, e)); } /// - /// Logs the given message, which has already been formatted using . + /// Logs the given message, which has already been formatted using or . /// /// The logger that the message was passed to /// The importance level of this message /// The message to log protected abstract void Log(Logger logger, LogLevel level, string s); - /// - /// The default formatter for logging messages. - /// By default, messages are laid out as follows: - /// - /// [Date and time] [Logger name, if set] [Log level] Message - /// Exception, if set - /// - /// - /// The logger that the message was passed to - /// The importance level of this message - /// The message - /// An optional exception whose stack trace will be appended to the message - /// A formatted string to log - protected virtual string FormatDefault(Logger logger, LogLevel level, object message, Exception e = null) { - var builder = new StringBuilder(); - // date - builder.Append($"[{DateTime.Now}] "); - // logger name - if (!string.IsNullOrEmpty(logger.Name)) - builder.Append($"[{logger.Name}] "); - // log level - builder.Append($"[{level}] "); - // message - builder.Append(message); - // stack trace - if (e != null) - builder.Append($"\n{e}"); - return builder.ToString(); - } - - /// - /// A delegate method used by . - /// - /// The logger that the message was passed to - /// The importance level of this message - /// The message - /// An optional exception whose stack trace will be appended to the message - public delegate string LogFormatter(Logger logger, LogLevel level, object message, Exception e = null); - /// /// Disposes this sink, freeing all of the resources it uses. /// - public virtual void Dispose() { - } + public virtual void Dispose() {} } } \ No newline at end of file diff --git a/ExtremelySimpleLogger/StringSink.cs b/ExtremelySimpleLogger/StringSink.cs index e8dee6b..7bbbed5 100644 --- a/ExtremelySimpleLogger/StringSink.cs +++ b/ExtremelySimpleLogger/StringSink.cs @@ -31,7 +31,7 @@ namespace ExtremelySimpleLogger { private readonly StringBuilder builder = new StringBuilder(); /// - /// Logs the given message, which has already been formatted using . + /// Logs the given message, which has already been formatted using or . /// /// The logger that the message was passed to /// The importance level of this message