假设我有部分配置,使用NLog:
<rules>
<logger name="ExistsInConfig" writeTo="Console"/>
</rules>
..然后我写下这段代码:
var configuredLogger = LogManager.GetLogger("ExistsInConfig");
configuredLogger.Log(LogLevel.Info, "hello, cruel world!");
var missingLogger = LogManager.GetLogger("NotInConfig");
missingLogger.Log(LogLevel.Info, "goodbye, cruel world!");
在控制台输出中,我将只看到第一个日志记录语句,因为在配置文件中找不到第二个命名记录器。
如何以编程方式检测到未找到第二台记录器,因此不会产生任何输出?
答案 0 :(得分:0)
如果你有Logger
的实例,你可以问它:
bool hasConfigRuleForInfo = missingLogger.IsEnabled(LogLevel.Info)
如果没有,那么你需要一些技巧,一些可能性:
LogManager
类,记住哪个记得使用哪个记录器LogManager.factory.loggerCache
(当然不支持;))*
)规则添加到您的配置(API或XML)并写入MemoryTarget或自定义目标。这可能会影响您的表现。 PS。使用${logger}
,您将获得记录器名称。您还需要其他规则的final
选项。答案 1 :(得分:0)
我认为这是最好的方法:
if (!NLog.LogManager.Configuration.ConfiguredNamedTargets.Any(t => t.Name.Equals("NameToValidate")))
{
//config not found
}
有了@Julian的回答,你可以拥有你正在寻找的Config,但不是你要比较的水平。你甚至可以在你的NLog配置中没有激活任何级别的Config。
在这些情况下,您会收到错误的检查回复。