JD2022-TU1/main/tools/framework/JD.LogService/Loggers/TextWriterLogger.cs

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
}
}