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