【发布时间】:2017-03-14 07:22:58
【问题描述】:
我有多个文件目标:
var config = new LoggingConfiguration();
for (int i = 1; i <= 5; i++)
{
var fileTarget = new FileTarget();
fileTarget.Layout = @"${date:format=dd-MM HH\:mm\:ss}[${var:passNumber" + i.ToString() + "}][${var:TestName" + i.ToString() + "}] - ${message}";
fileTarget.FileName = string.Format(@"log-cell{0}.txt", i);
fileTarget.KeepFileOpen = false;
config.AddTarget(string.Format("file{0}", i), fileTarget);
var ruleFile = new LoggingRule(string.Format("{0}", i), LogLevel.Debug, fileTarget);
config.LoggingRules.Add(ruleFile);
}
LogManager.Configuration = config;
然后我可以访问单个规则并写入相应的目标:
LogManager.Configuration.Variables["passNumber1"] = 33.ToString();
LogManager.Configuration.Variables["TestName1"] = "Test1";
LogManager.GetLogger("1").Debug("Test1");
LogManager.Configuration.Variables["passNumber2"] = 44.ToString();
LogManager.Configuration.Variables["TestName2"] = "Another Test";
LogManager.GetLogger("2").Debug("Test2");
这可以正常工作并为每个规则创建不同的文件。现在我还想要一个单独的RichTextBoxTarget 或者说特殊目标:
- 所有可能的日志都将被复制或仅达到选择性级别
- 布局将包含与文件目标相同的格式/变量
我不确定如何让单个目标具有多个布局。我的尝试是将以下内容添加到循环中
var ruleWnd = new LoggingRule(string.Format("{0}", i), LogLevel.Debug, rtTarget);
config.LoggingRules.Add(ruleWnd);
这当然会登录消息,但我丢失了变量。 所以问题是如何添加单个目标,它将捕获所有日志(或级别控制器),包括定义的变量。
【问题讨论】: