我需要更改不同用途的布局

时间:2012-02-25 07:45:29

标签: c# nlog

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

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

1 个答案:

答案 0 :(得分:2)

编辑:要回答您编辑过的问题,LoggingRule rule2 = new LoggingRule("*", LogLevel.Trace, fileTarget)会将任意输出记录到日志文件中。

如果您想要特定的输出,那么您必须具体使用NLog。 例如,使用fileTarget(“*”)记录范围从TraceInfo的任何内容,并使用其他两个特定目标aspects和{{1日志级别从rule2Error

然后你可以这样记录:

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