【问题标题】:Why do I get an "Object Reference" error when trying to get my log4net logging level? [duplicate]为什么在尝试获取 log4net 日志记录级别时会出现“对象引用”错误? [复制]
【发布时间】:2020-01-22 13:59:48
【问题描述】:

我正在尝试在运行时让我当前的 log4net 日志记录级别显示在我的应用 UI 上。

string strLogLevel = "";
strLogLevel = ((log4net.Repository.Hierarchy.Logger)mylogger.Logger).Level.ToString();

但每次运行此代码时,我都会收到以下错误:

{"Object reference not set to an instance of an object."}

我确信我的日志记录配置正确,因为我正在生成日志。那到底是怎么回事?

【问题讨论】:

  • 我会拆分语句,看看哪个是空的。例如,将 (log4net.Repository.Hierarchy.Logger)mylogger 提取到变量中,然后查看转换是否导致非空。
  • 要么mylogger 为空,要么mylogger.Logger 为空,要么.Level 为空。使用您的调试器来确定是哪种情况。

标签: c# asp.net log4net


【解决方案1】:

如果不查看调用上下文很难判断,但一般答案在这里:

https://stackoverflow.com/a/4660186/4406646

特定于 log4net,根据配置,记录器可以(并且通常)配置多个级别。您还可以使用此处描述的方法控制调用的级别:

https://logging.apache.org/log4net/release/sdk/html/Methods_T_log4net_ILog.htm

要获取与级别相关的字符串值用于 ILog 方法调用,您可以像这样包装调用:

MyLogger.cs

using System.Reflection;
using log4net;

namespace YourNamespace
{
    internal static class MyLogger
    {
        private static readonly ILog Logger =
                                 LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

        internal static string LogSomething()
        {
            Logger.Info("something");
            return "Info";
        }
    }
}

YourNamespace 中的其他位置

string strLogLevel  = MyLogger.LogSomething();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-04
    • 1970-01-01
    • 2017-04-10
    • 1970-01-01
    • 2019-06-05
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多