我想从自定义log4net.Core.LoggingEvent
appender的Append
方法中的log4net
对象获取自定义数据。
public sealed class SimpleAppender : AppenderSkeleton
{
protected override void Append(LoggingEvent loggingEvent)
{
// How can I receive my data?
}
}
我知道log4net.Core.LoggingEvent
包含Properties
属性。它的类型为log4net.Util.PropertiesDictionary
。记录器或追加器可以附加特定事件的附加属性,但我不确定它是我正在寻找的方式。我需要在这里获得testId
。我在标记为testId
属性的方法中创建了[TestInitialize]
。
public class UnitTest1
{
public TestContext TestContext { get; set; }
[TestInitialize]
public void Initialize()
{
Guid testId = Guid.NewGuid();
}
[TestMethod]
public void TestMethod1()
{
ApplicationLogger.LogInfo("TestMethod1 has started.");
}
}
ApplicationLogger
类是一个简单的log4net
记录器包装器,它将结果打印到控制台中。我知道我可以做这样的事情。
ApplicationLogger.LogInfo("Test message", testId);
public static class ApplicationLogger
{
private static readonly log4net.ILog log4netLogger;
public static void LogInfo(Guid testId, string infoMessage)
{
ApplicationLogger.log4netLogger.Info(new LogMessageModel
{
Text = infoMessage,
TestId = testId
});
}
}
但是每次我需要记录某些内容时,我都不想将testId
设置为LogInfo()
方法。还有另一种更优雅的方式吗?提前致谢。
答案 0 :(得分:0)
向Initialize()
添加一个静态ApplicationLogger
函数,该函数接受testId作为参数,并从ApplicationLogger.Initialize(testId)
调用UnitTest1.Initialize()
。