1

我想从自定义附加程序的log4net.Core.LoggingEvent内部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.");
    }       
}

ApplicationLoggerclass 是一个简单的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()。还有其他更优雅的方式吗?提前致谢。

4

1 回答 1

0

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

于 2018-05-02T16:58:41.163 回答