使用自定义PatternLayoutConverter

时间:2019-01-30 15:10:38

标签: log4net

我正在尝试创建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类不再显示。同样,每隔一个原木仅将第二个原木包裹在o.O段中 这是尝试的错误方法吗?如果是这样,那怎么办?

0 个答案:

没有答案