首页 > 解决方案 > 一起填充多个 Log4Net 模式通配符

问题描述

我想在我们的日志输出中包含类和方法名称,并具有组合的固定宽度,看起来像这样;

ClassA.MethodA            - message
AnotherClass.AnotherMethod- message
WhateeverClass.Meth       - message
SomeReallyLongClass.AndAreallyLongMethod- message

是否有可能以某种方式结合 2 个通配符说 like %-50class.method

谢谢!

标签: log4net

解决方案


没有对填充转换模式组合的内置支持。

您最好的选择是实现自定义PatternLayoutConverter返回 和 的组合%class结果%method。在这一个上,您可以以常规方式应用填充说明符。

图案布局

namespace PFX
{   
    public class ClassAndMethodPatternConverter : PatternLayoutConverter
    {
        protected override void Convert(TextWriter writer, LoggingEvent loggingEvent)
        {
            var info = loggingEvent.LocationInformation;
            var text = $"{info.ClassName}.{info.MethodName}";
            writer.Write(text);
        }
    }
}

Log4net在配置文件中注册和使用

PFX.ClassAndMethodIdPatternConverter, MyLibrary表示上述模式转换器的全称,由命名空间、类和程序集组成。

<appender name="consoleAppender" type="log4net.Appender.ConsoleAppender" >
    <layout type="log4net.Layout.PatternLayout">
        <converter>
            <name value="classandmethod" />
            <type value="PFX.ClassAndMethodPatternConverter, MyLibrary" />
        </converter>
        <conversionPattern value="%date | %logger | %level | %-50classandmethod | %message | %exception%n" />
    </layout>
</appender>

推荐阅读