一起填充多个 Log4Net 模式通配符

Padding Multiple Log4Net Pattern Wildcards Together

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

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

是否可以以某种方式组合 2 个通配符,例如 %-50class.method

谢谢!

不支持填充转换模式组合。

您最好的选择是实施自定义 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表示上面模式转换器的全名,由命名空间、class和程序集组成。

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