79 lines
2.5 KiB
C#
79 lines
2.5 KiB
C#
using log4net.Appender;
|
|
using log4net.Core;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using Voile.Common;
|
|
using Voile.Common.Logging;
|
|
|
|
namespace Voile
|
|
{
|
|
internal class VoileLog4netSink : IAppender
|
|
{
|
|
private VoileLogger myOwnLogger;
|
|
private bool wasInitalized;
|
|
private bool isClosed;
|
|
public void Initalize()
|
|
{
|
|
if (wasInitalized)
|
|
{
|
|
throw new VoileException("Log sink already initalized.");
|
|
}
|
|
|
|
myOwnLogger = VoileLogManager.GetLogger(GetType());
|
|
myOwnLogger.Debug("Initalize VoileLog4netSink");
|
|
|
|
var hierarchy = (log4net.Repository.Hierarchy.Hierarchy)log4net.LogManager.GetRepository();
|
|
hierarchy.Root.AddAppender(this);
|
|
hierarchy.Root.Level = log4net.Core.Level.All;
|
|
log4net.Config.BasicConfigurator.Configure(hierarchy);
|
|
wasInitalized = true;
|
|
}
|
|
|
|
private log4net.Layout.PatternLayout logLayout;
|
|
|
|
private string log4netName;
|
|
public string Name { get => log4netName; set => log4netName = value; }
|
|
|
|
public void DoAppend(LoggingEvent loggingEvent)
|
|
{
|
|
if (isClosed)
|
|
{
|
|
throw new VoileException("Can't append to a closed logger.");
|
|
}
|
|
if (logLayout == null)
|
|
{
|
|
logLayout = new log4net.Layout.PatternLayout();
|
|
logLayout.ConversionPattern = "%date %level %logger - %message";
|
|
logLayout.ActivateOptions();
|
|
}
|
|
string v = logLayout.Format(loggingEvent);
|
|
|
|
string loggerName = loggingEvent.LoggerName;
|
|
VoileLogLevel logLevel = TranslateLogLevel(loggingEvent.Level);
|
|
|
|
VoileLogManager.GetLogger(loggerName).Log(logLevel, loggingEvent.RenderedMessage);
|
|
}
|
|
|
|
private VoileLogLevel TranslateLogLevel(Level level)
|
|
{
|
|
switch(level.Value)
|
|
{
|
|
case 30000:
|
|
return VoileLogLevel.DEBUG;
|
|
case 40000:
|
|
return VoileLogLevel.INFO;
|
|
default:
|
|
throw new NotImplementedException(String.Format("Loglevel: {0}", level.Value));
|
|
}
|
|
}
|
|
|
|
public void Close()
|
|
{
|
|
isClosed = true;
|
|
}
|
|
}
|
|
}
|