从一个方面编写日志条目时,我需要更改日志文件的布局。我可能还需要及时更改其他设置。
我创建了两个FileTargets,可以根据需要创建布局。
LoggingConfiguration config = new LoggingConfiguration();
LoggingConfiguration aspectConfig = new LoggingConfiguration();
FileTarget fileTarget = new FileTarget();
fileTarget.Name = "fileTarget";
fileTarget.Layout = "${longdate} ${machineName} ${callsite} ${message} ${exception:format=tostring}";
fileTarget.FileName = String.Format("{0}Admin.log", Config.DatabasePath);
fileTarget.KeepFileOpen = false;
FileTarget aspectTarget = new FileTarget();
aspectTarget.Name = "aspectTarget";
aspectTarget.Layout = "${longdate} ${machineName} ${message} ${exception:format=tostring}";
aspectTarget.FileName = String.Format("{0}Admin.log", Config.DatabasePath);
aspectTarget.KeepFileOpen = false;
LoggingRule rule2 = new LoggingRule("*", LogLevel.Trace, fileTarget);
config.LoggingRules.Add(rule2);
LoggingRule aspectRule = new LoggingRule("aspects", LogLevel.Trace, aspectTarget);
aspectConfig.LoggingRules.Add(aspectRule);
LogManager.Configuration = config;
可能会有其他变化/差异,但除了现阶段的要点之外。
使用以下设置适用于'default或'*'配置,即使用:
var log = LogManager.GetCurrentClassLogger();
log.Fatal("##########################################");
我想要做的是通过调用logger并指定'aspectRule'来使用'aspectRule'而不是默认的'*'规则。
我原以为这会起作用:
var log = LogManager.GetLogger("aspects");
log.Fatal("########################################");
这一切都很好但是我看不出如何定义一个名为'aspects'的新Logger,特别是在代码中我甚至没有创建一个名为'*'的Logger: - )
请注意,我没有使用XML配置文件,需要以编程方式使用解决方案。
有什么想法吗?
修改
我需要写一个日志条目,如下例所示:
if (someCondition)
logger.Fatal("#############"); // use layout in fileTarget
else
logger.Fatal("##############"); // use layout in aspectTarget
答案 0 :(得分:2)
编辑:要回答您编辑过的问题,LoggingRule rule2 = new LoggingRule("*", LogLevel.Trace, fileTarget)
会将任意输出记录到日志文件中。
如果您想要特定的输出,那么您必须具体使用NLog。
例如,使用fileTarget(“*”)记录范围从Trace
到Info
的任何内容,并使用其他两个特定目标aspects
和{{1日志级别从rule2
到Error
。
然后你可以这样记录:
Fatal
-
您正在创建两个配置LogManager.GetCurrentClassLogger().Debug( "Non-specific message" );
LogManager.GetLogger( "rule2" ).Fatal( "From rule2" );
LogManager.GetLogger( "aspects" ).Fatal( "From Aspects" );
和config
,同时设置这两个配置并最终设置aspectConfig
。
最终未使用LogManager.Configuration = config
。要解决此问题,请删除所有aspectConfig
相关代码并将aspectConfig
行修复为:
acpects