繁体   English   中英

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

[英]How to pass custom data to the log4net.Core.LoggingEvent object?

我想从我的自定义log4net附加程序的Append方法内的log4net.Core.LoggingEvent对象获取自定义数据。

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 我在标记为[TestInitialize]属性的方法中创建了该testId

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM