我创建了一个通用的ILogger实现,其中实现了NLog实现方法。我的问题是,我已经在解决方案中为整个命名空间启用了错误严重性,但我还希望在“员工”命名空间下为类启用Info级别的诊断功能,因此我又定义了另一条规则,使得该命名空间下的类符合Info级别的日志记录。但是当我仅记录这些命名空间下的类时,只有错误和致命错误被记录。当我调试时,我发现这些类的logger实例的IsInfoEnabled() 为false?我感觉我的包装器类配置方式似乎有缺陷?能否有人提供建议。
通用ILogger接口 public interface ILogger {
通用ILogger接口 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接口的实现
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级别也不会记录其他级别的消息,该名称空间。
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");
}
}
我有一个目标和两个规则来实现这个目标
<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>