2012-02-25 14 views
0

从某个方面编写日志条目时,我需要更改我的日志文件的布局。我可能需要及时更改其他设置。我需要更改不同用途的布局

我创建了两个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 

回答

2

编辑:为了回答你编辑的问题,LoggingRule rule2 = new LoggingRule("*", LogLevel.Trace, fileTarget)将记录任何输出到日志文件。

如果你想要一个特定的输出,那么你必须具体使用NLog。 例如,记录任何从Trace高达Info与fileTarget(“*”),并有两个其他具体目标aspectsrule2与日志级别从ErrorFatal

然后,你可以登录如下:

LogManager.GetCurrentClassLogger().Debug("Non-specific message"); 
LogManager.GetLogger("rule2").Fatal("From rule2"); 
LogManager.GetLogger("aspects").Fatal("From Aspects"); 

-

你创建了两个配置configaspectConfig,当设定了最终设定LogManager.Configuration = config

最终aspectConfig没有被使用。要解决,删除所有aspectConfig相关的代码和固定acpects行这样的:

config.LoggingRules.Add(aspectRule);

+0

你的建议是什么我原本。这意味着当我执行log.Fatal(“####”)时,记录会在日志中记录两次。我的问题是 - 我如何记录一个条目。我明白了我的问题,使其更清晰。 – David 2012-02-25 11:08:18

+0

谢谢 - 这很好地阐明了它。这是LogManager.GetLogger(????),让我感到困惑,以什么来代替????? 。 – David 2012-02-25 18:54:48

+0

是的,特定的目标记录器。 NLog是一个非常棒的图书馆。请享用。 – AVIDeveloper 2012-02-25 21:35:43