gpt4 book ai didi

nlog - 未为 NLog 记录器启用日志级别

转载 作者:行者123 更新时间:2023-12-02 03:40:09 27 4
gpt4 key购买 nike

我已经创建了一个通用实现 ILogger 并在这个包装器中实现了 NLog 实现方法。我的问题是我在我的解决方案中为整个 namspace 启用了错误严重性,但我还希望对“Employee”命名空间下的类进行信息级别诊断,因此我有另一条规则设置此命名空间下的类符合信息级别日志记录。但是,当我只记录错误和 fatal error 时,这些命名空间下的类会被记录下来。当我调试时,我可以看到这些类的记录器实例的 IsInfoEnabled() 为假?我觉得他们配置我的包装器类的方式似乎有问题?有人可以建议。

通用 ILogger 接口(interface) 公共(public)接口(interface) ILogger {

    bool Trace(string message, params String[] args);


bool Info(string message, params String[] args);


bool Error(string message, params String[] args);


bool Fatal(string message, params String[] args);


bool Error(string message, Exception ex, String[] args);


bool Fatal(string message, Exception ex, params String[] args);
}

ILogger接口(interface)的实现

 using NLog;

class NLogImpl : ILogger
{

NLog.Logger logger = null;


public NLogImpl(string source)
{
logger = LogManager.GetLogger(source);
}


bool ILogger.Trace(string message ,params String[] args)
{

logger.Trace(BuildArgumentsWithMessage(message , args));
return true;
}...

使用通用 ILogger 的类此类仅记录错误和致命消息,但不记录任何其他级别,即使在配置文件中我已启用 Info this namespace

  public class MainTechDetails
{
private static ILogger logger = CommonLogger.GetLogger("MainTechDetails");

public void LogMainTechDetails()
{
logger.Trace("Sample trace message");
logger.Info("Sample informational message");
logger.Error("Sample error message");
logger.Fatal("Sample fatal error message");
}
}

我有一个目标和这个目标的 2 个规则

    <target xsi:type="File"
name="logFile"
fileName="D:\LogInformation.log"
layout="${date} ${callsite} ${message}"/>
</targets>

<rules>
<logger name="CustomLoggingNlog.Employee.*" minlevel="Info" writeTo="logFile" />
<logger name="*" minlevel="Error" writeTo="logFile"/>
</rules>

最佳答案

看起来你有一些问题:

  1. 您已经为“CustomLoggingNLog.Employee.”和“”配置了日志记录规则。在您的示例应用程序中,您检索了一个名为“MainTechDetails”的记录器。您应该根据完全命名空间限定名称检索记录器:CustomLoggingNLog.Employee.MainTechDetails。或者,如果您的通用实现允许,通过使用类型:

    CommonLogger.GetLogger(typeof(MainTechDetails));

  2. 如所写,您的包装器不会正确维护调用站点(如果您使用 NLog 的调用站点 LayoutRenderer)。您不是在调用记录器的位置获取代码的调用站点,而是从记录器内部获取调用站点。这可能不是很有用。有关如何包装 NLog 以保留调用站点的示例,请参阅我在此问题中的回答:

Nlog Callsite is wrong when wrapper is used

祝你好运!

关于nlog - 未为 NLog 记录器启用日志级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20572305/

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