从某个方面编写日志条目时,我需要更改我的日志文件的布局。我可能需要及时更改其他设置。我需要更改不同用途的布局
我创建了两个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("##########################################");
我想要做的是能够使用‘aspectRule’,而不是默认的‘*’通过调用记录器并指定'aspectRule'来规则化。
我原以为这会工作:
var log = LogManager.GetLogger("aspects");
log.Fatal("########################################");
这是一个好主意,但我看不到我如何定义一个名为“方面”特别是在代码中,我甚至不创造新的记录仪一个名为'*'的记录器:-)
请注意,我没有使用XML配置文件,需要使用编程方式的解决方案。
任何想法?
编辑:
我需要写1个日志条目在这个例子:
if (someCondition)
logger.Fatal("#############"); // use layout in fileTarget
else
logger.Fatal("##############"); // use layout in aspectTarget
你的建议是什么我原本。这意味着当我执行log.Fatal(“####”)时,记录会在日志中记录两次。我的问题是 - 我如何记录一个条目。我明白了我的问题,使其更清晰。 – David 2012-02-25 11:08:18
谢谢 - 这很好地阐明了它。这是LogManager.GetLogger(????),让我感到困惑,以什么来代替????? 。 – David 2012-02-25 18:54:48
是的,特定的目标记录器。 NLog是一个非常棒的图书馆。请享用。 – AVIDeveloper 2012-02-25 21:35:43