ExtremelySimpleLogger/ExtremelySimpleLogger/Sink.cs

50 lines
2.2 KiB
C#
Raw Permalink Normal View History

2020-07-23 02:24:18 +02:00
using System;
using System.Text;
namespace ExtremelySimpleLogger {
2020-07-23 02:46:34 +02:00
/// <summary>
/// A sink is a way for log messages passed to a <see cref="Logger"/> to be processed in a certain way.
/// </summary>
public abstract class Sink : IDisposable {
2020-07-23 02:24:18 +02:00
2020-07-23 02:46:34 +02:00
/// <summary>
/// The minimum level that a log message needs to have for it to be processed by this sink.
/// </summary>
public LogLevel MinimumLevel { get; set; } = LogLevel.Trace;
2020-07-23 02:46:34 +02:00
/// <summary>
/// The <see cref="LogFormatter"/> with which log messages should be formatted.
/// <see cref="Logger.DefaultFormatter"/> is used if this is <see langword="null"/>.
2020-07-23 02:46:34 +02:00
/// </summary>
2020-07-23 02:24:18 +02:00
public LogFormatter Formatter { get; set; }
2020-07-29 15:14:19 +02:00
/// <summary>
/// If this property is set to <code>false</code>, this sink will not log any messages.
/// </summary>
public bool IsEnabled { get; set; } = true;
2020-07-23 02:24:18 +02:00
2020-07-23 02:46:34 +02:00
/// <summary>
/// Logs a message in the way specified by the sink's implementation.
/// </summary>
/// <param name="logger">The logger that the message was passed to</param>
/// <param name="level">The importance level of this message</param>
/// <param name="message">The message</param>
/// <param name="e">An optional exception whose stack trace will be appended to the message</param>
public virtual void Log(Logger logger, LogLevel level, object message, Exception e = null) {
var formatter = this.Formatter ?? logger.DefaultFormatter;
this.Log(logger, level, formatter.Invoke(logger, level, message, e));
2020-07-23 02:24:18 +02:00
}
2020-07-23 02:46:34 +02:00
/// <summary>
/// Logs the given message, which has already been formatted using <see cref="Formatter"/> or <see cref="Logger.DefaultFormatter"/>.
2020-07-23 02:46:34 +02:00
/// </summary>
2020-07-29 14:23:23 +02:00
/// <param name="logger">The logger that the message was passed to</param>
/// <param name="level">The importance level of this message</param>
2020-07-23 02:46:34 +02:00
/// <param name="s">The message to log</param>
2020-07-29 14:23:23 +02:00
protected abstract void Log(Logger logger, LogLevel level, string s);
2020-07-23 02:24:18 +02:00
/// <summary>
/// Disposes this sink, freeing all of the resources it uses.
/// </summary>
public virtual void Dispose() {}
2020-07-23 02:24:18 +02:00
}
}