我需要改变布局以适应不同的用途
本文关键字:改变 布局 | 更新日期: 2023-09-27 18:25:41
从一个方面写入日志条目时,我需要更改日志文件的布局。我可能还需要及时更改其他设置。
我创建了两个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;
可能还会有其他变化/差异,但这不是现阶段的重点。
使用以下方法可以很好地用于"默认"或"*"配置,即使用:
var log = LogManager.GetCurrentClassLogger();
log.Fatal("##########################################");
我想做的是能够通过调用logger并指定"aspectRule"来使用"aspectRule"而不是默认的"*"规则。
我原以为这会奏效:
var log = LogManager.GetLogger("aspects");
log.Fatal("########################################");
这一切都很好,但我看不出我是如何定义一个名为"方面"的新Logger的,尤其是在代码中,我甚至没有创建一个称为"*"的Logger:-)
请注意,我没有使用XML配置文件,需要一个可编程使用的解决方案。
有什么想法吗?
编辑:
我需要写一个日志条目,如本例所示:
if (someCondition)
logger.Fatal("#############"); // use layout in fileTarget
else
logger.Fatal("##############"); // use layout in aspectTarget
EDIT:要回答编辑后的问题,LoggingRule rule2 = new LoggingRule("*", LogLevel.Trace, fileTarget)
将任何输出记录到日志文件中。
如果你想要一个特定的输出,那么你必须使用NLog。例如,使用fileTarget("*")记录从Trace
到Info
的任何内容,并具有另外两个特定目标aspects
和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
。
最终CCD_ 11没有被使用。要解决此问题,请删除所有与aspectConfig
相关的代码,并将acpects
行修复为:
config.LoggingRules.Add(aspectRule);