gpt4 book ai didi

nlog - 匹配特定 NLog 记录器名称的问题

转载 作者:行者123 更新时间:2023-12-01 13:04:30 30 4
gpt4 key购买 nike

我在 NLog.config 中配置了两条规则:

<logger name="Model" level="Info" writeTo="modelLog" final="true" />
<logger name="*" minlevel="Debug" writeTo="logFile" />

我正在尝试使用以下代码写入第一个:
LogEventInfo eventInfo = new LogEventInfo();
eventInfo.Level = LogLevel.Info;
eventInfo.LoggerName = "Model";
eventInfo.TimeStamp = DateTime.Now;
logger.Log(eventInfo);

但它一直落入第二条规则。我会想到 eventInfo.LoggerName = "Model";会直接发送到第一条规则吗?

最佳答案

现在不在电脑前,所以无法尝试您的案例,但我有几个问题。

  • 您可以尝试使用“常规”日志记录功能(信息、调试)并查看是否可以按预期工作吗?
  • 你是如何解决你的记录器的?那是。 “记录者”的名字是什么?

  • 如果实际记录器的名称不是“模型”,我的猜测是它不会满足“模型”条件,即使您在 LogEventInfo 的名称字段中传递“模型”。

    [编辑]
    这是一个可以在 Ninject Logging Extension 中使用的更好的 NLog 记录器包装器的缩写示例。此包装器以保留调用站点信息(记录请求发起的类和方法)的方式将记录调用委托(delegate)给底层 NLog 记录器。
      class NLogLogger : ILogger
    {
    private NLog.Logger logger;

    //The Type that is passed in is ultimately the type of the current object that
    //Ninject is creating. In the case of my example, it is Class1 and Class1 is
    //dependent on ILogger.
    public NLogLogger(Type t)
    {
    logger = NLog.LogManager.GetLogger(t.FullName);
    }

    //Trace, Warn, Error, Fatal eliminated for brevity

    public bool IsInfoEnabled
    {
    get { return logger.IsInfoEnabled; }
    }

    public bool IsDebugEnabled
    {
    get { return logger.IsDebugEnabled; }
    }

    public void Info(string format, params object [] args)
    {
    if (logger.IsInfoEnabled)
    {
    Write(LogLevel.Info, format, args);
    }
    }

    public void Debug(string format, params object [] args)
    {
    if (logger.IsDebugEnabled)
    {
    Write(LogLevel.Debug, format, args);
    }
    }

    private void Write(LogLevel level, string format, params object [] args)
    {
    LogEventInfo le = new LogEventInfo(level, logger.Name, null, format, args);
    logger.Log(typeof(NLogLogger), le);
    }
    }

    显然这个例子没有处理异常。但是,我认为它说明了包装 NLog 的正确方法。实现完整的 Ninject 日志记录扩展 ILogger 接口(interface)将很容易,将每个 Info、Debug、Warn 等调用委托(delegate)给一个中央 Write 方法,该方法将创建 LogEventInfo 类,然后使用底层 NLog 记录器实例记录它,传入包装记录器的类型(在我的示例中为 typeof(NLogLogger))。传递包装记录器的类型对于维护来自应用程序代码的记录调用的调用站点信息至关重要。

    基于 Ninject Logging Extensions git repository 中的 NLog 包装器.

    More about dependency injection and named loggers (like NLog and log4net).

    看我的回答 here有关天真的记录器包装器问题的更多信息。

    关于nlog - 匹配特定 NLog 记录器名称的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3947136/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com