Log4net-使用包装器时如何获取调用方法的名称

时间:2018-11-17 23:17:51

标签: c# asp.net-web-api logging log4net log4net-appender

我有一个log4net包装器,用于在Web api应用程序中记录错误消息。它工作正常,但我无法记录调用方法的名称。它仅显示顶级方法名称。可以说,我有一个类A的方法a,它调用了类B的方法b,并且b记录了错误消息。 Log4net仅显示Class A和方法a,但我想显示完整的调用链A-a-B-b或至少B-b

private static readonly ILog LoggerObject = LogManager.GetLogger("ErrorLog");

log4net配置

<log4net>
    <appender name="ErrorLog" type="log4net.Appender.RollingFileAppender">
        <file value="LogBackUp2.log" />
        <staticLogFileName value="false" />
        <appendToFile value="true" />
        <rollingStyle value="Date" />
        <datePattern value="yyyy-MM-dd.'Err'" />
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger [%M %C] - %message%newline" />
        </layout>
    </appender>
    <logger name="ErrorLog">
        <maximumFileSize value="15MB" />
        <appender-ref ref="ErrorLog" />
    </logger>
</log4net>

如果我使用它,则log4net不会创建任何日志文件。

LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType)

1 个答案:

答案 0 :(得分:0)

使用%stacktrace{5}显示5个堆栈跟踪级别,这些级别导致调用log方法。用您想要的级别替换5。例如:

<conversionPattern value="%date [%thread] %-5level %logger [%stacktrace{5}] - %message%newline" />

When you use a log4net wrapper you may want to apply this to get rid of the wrapper in the stacktrace