如何将自定义数据传递给log4net.Core.LoggingEvent对象?

时间:2018-03-23 15:26:31

标签: c# log4net mstest testcontext

我想从自定义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()方法。还有另一种更优雅的方式吗?提前致谢。

1 个答案:

答案 0 :(得分:0)

Initialize()添加一个静态ApplicationLogger函数,该函数接受testId作为参数,并从ApplicationLogger.Initialize(testId)调用UnitTest1.Initialize()

相关问题