【问题标题】:Log4net - How to get calling method name when using wrapperLog4net - 使用包装器时如何获取调用方法名称
【发布时间】:2019-04-20 17:47:31
【问题描述】:

我有一个 log4net 包装器,用于在 web api 应用程序中记录错误消息。它工作正常,但我无法记录调用方法名称。它只显示顶级方法名称。可以说,我有一个 A 类的方法 a 调用 B 类的方法 b 和 b 记录错误消息。 Log4net 仅显示 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)

【问题讨论】:

  • 我认为如果方法由于编译器优化而被内联,'GetCurrentMethod()' 会给出错误的结果。也许您可以使用 CallerMemberName 属性。
  • this线程。

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


【解决方案1】:

使用%stacktrace{5} 显示导致调用 log 方法的堆栈跟踪的 5 个级别。将 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-07
    • 1970-01-01
    • 2011-10-27
    • 2011-07-03
    • 2014-07-11
    • 1970-01-01
    相关资源
    最近更新 更多