我有多个文件目标:
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);
当然会记录消息,但我正在丢失变量。 所以问题是如何添加单个目标,它将捕获所有日志(或级别控制器),包括已定义的变量。
答案 0 :(得分:0)
所以问题是如何添加单个目标,它将捕获所有日志(或级别控制器),包括已定义的变量。
变量属于全局级别,因此您只能使用一个。
在这种情况下&#34;事件属性&#34;是你正在寻找的地方。用法:
Logger logger = LogManager.GetCurrentClassLogger();
LogEventInfo theEvent = new LogEventInfo(LogLevel.Debug, "", "Test1");
theEvent.Properties["passNumber"] = 33;
logger.Debug(theEvent);
在您的配置中使用:
${event-properties:item=passNumber}