112 lines
2.5 KiB
C#
112 lines
2.5 KiB
C#
using System;
|
|
using System.IO;
|
|
using JD.Kernel.Classes;
|
|
using JD.Kernel.StaticHelpers;
|
|
|
|
namespace JD.LogService.Loggers
|
|
{
|
|
public class TextWriterLogger : AbstractDisposable, ILogger
|
|
{
|
|
#region Variables
|
|
|
|
private TextWriter m_textWriter;
|
|
private Converter<LogEvent, string> m_formatter = DefaultFormat;
|
|
private bool m_immediateFlush = true;
|
|
|
|
#endregion
|
|
|
|
#region Constructor / Dispose
|
|
|
|
protected override void Dispose(bool disposing)
|
|
{
|
|
if (disposing)
|
|
{
|
|
Reset();
|
|
}
|
|
|
|
base.Dispose(disposing);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Properties
|
|
|
|
/// <summary>
|
|
/// The writer used to write events.
|
|
/// </summary>
|
|
public TextWriter TextWriter
|
|
{
|
|
get { return m_textWriter; }
|
|
set
|
|
{
|
|
if (m_textWriter != value)
|
|
{
|
|
DisposeTextWriter();
|
|
m_textWriter = value;
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Formatter used to render log events.
|
|
/// </summary>
|
|
public Converter<LogEvent, string> Formatter
|
|
{
|
|
get { return m_formatter; }
|
|
set
|
|
{
|
|
Throw.IfNull(value, "Formatter");
|
|
m_formatter = value;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Whether to flush data after writing. True by default.
|
|
/// </summary>
|
|
public bool ImmediateFlush
|
|
{
|
|
get { return m_immediateFlush; }
|
|
set { m_immediateFlush = value; }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Methods
|
|
|
|
public virtual void Log(LogEvent @event)
|
|
{
|
|
WriteLine(m_formatter(@event));
|
|
|
|
if (ImmediateFlush)
|
|
{
|
|
m_textWriter.Flush();
|
|
}
|
|
}
|
|
|
|
protected virtual void WriteLine(string line)
|
|
{
|
|
m_textWriter.WriteLine(line);
|
|
}
|
|
|
|
protected virtual void Reset()
|
|
{
|
|
DisposeTextWriter();
|
|
}
|
|
|
|
private void DisposeTextWriter()
|
|
{
|
|
if (m_textWriter != null)
|
|
{
|
|
m_textWriter.Close();
|
|
m_textWriter = null;
|
|
}
|
|
}
|
|
|
|
private static string DefaultFormat(LogEvent @event)
|
|
{
|
|
return $"{@event.Timestamp:dd/MM/yy HH:mm:ss} : {@event.ToCanonicalString()}";
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|