Log4Net обернуть журнал в HTML-абзац с пользовательским PatternLayoutConverter - PullRequest
0 голосов
/ 30 января 2019

Я пытаюсь создать страницу журнала HTML.Для этого мне нужно обернуть журналы в абзацы, но я не могу заставить это работать с пользовательским шаблоном PatternLayoutConverter.

Вот что я пробовал до сих пор:

static void Setup()
{
    Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();

    PatternLayout patternLayout = new PatternLayout();
    patternLayout.AddConverter("HTML", typeof(HtmlConverter));
    patternLayout.ConversionPattern = "%HTML{%date{HH:mm:ss,fff} %level [%thread] %logger{2} - %message}";
    patternLayout.ActivateOptions();

    RollingFileAppender roller = new RollingFileAppender();
    roller.AppendToFile = false;
    roller.File = "./Log.html";
    roller.Layout = patternLayout;
    roller.MaximumFileSize = "10MB";
    roller.MaxSizeRollBackups = 3;
    roller.RollingStyle = RollingFileAppender.RollingMode.Once;
    roller.StaticLogFileName = true;
    roller.ActivateOptions();
    hierarchy.Root.AddAppender(roller);

    hierarchy.Root.Level = Level.All;
    hierarchy.Configured = true;
}

class HtmlConverter : PatternLayoutConverter
{
    protected override void Convert(TextWriter writer, LoggingEvent loggingEvent)
    {
        string color = "";
        switch (loggingEvent.Level.Name)
        {
            case "DEBUG":
                color = "#58ff42";
                break;
            case "WARN":
                color = "#ffe20c";
                break;
            case "INFO":
                color = "#ffffff";
                break;
            case "ERROR":
                color = "#ff2828";
                break;
            case "FATAL":
                color = "#ff5b5b";
                break;
        }
        string logToRender = string.Format("<p style='color:{0};'>{1}</p>", color, loggingEvent.RenderedMessage);
        writer.Write(logToRender);
    }
}

Это дастследующий результат:

<p style='color:#58ff42;'>Log</p>
DEBUG [1] PLINTest.Awake - Log}
<p style='color:#ffffff;'>LogAssertion</p>
INFO [1] PLINTest.Awake - LogAssertion}
<p style='color:#ff2828;'>LogError</p>
ERROR [1] PLINTest.Awake - LogError}
<p style='color:#ff5b5b;'>Exception: Exception of type 'System.Exception' was thrown.</p>
FATAL [1] PLINTest.Awake - Exception: Exception of type 'System.Exception' was thrown.}
<p style='color:#ffe20c;'>LogWarning</p>
WARN [1] PLINTest.Awake - LogWarning}
<p style='color:#ff5b5b;'>Exception: Exception throw</p>
FATAL [1] Application.CallLogCallback - Exception: Exception throw}

Date, LogLevel, ThreadID и Calling class даже больше не отображаются.Также только каждый второй журнал упакован в апараграф oO. Это неправильный способ попробовать.Если так, как это будет выполнимо?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...