log4net MemoryAppender无法正常工作

Ter*_*rco 7 log4net appender

我正在使用log4net登录我的应用程序.我的FileAppender工作正常,但我遇到MemoryAppender问题.

这是我的配置文件.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
    </configSections>
<log4net>
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
  <param name="File" value="Envision.log" />
  <param name="AppendToFile" value="true" />
  <layout type="log4net.Layout.PatternLayout">
    <param name="Header" value="" />
    <param name="Footer" value="" />
    <param name="ConversionPattern" value="%d [%t] %-5p %m%n" />
  </layout>
</appender>
<appender name="MemoryAppender" type="log4net.Appender.MemoryAppender">

</appender>
<root>
  <level value="ALL" />
  <appender-ref ref="LogFileAppender" />
  <appender-ref ref="MemoryAppender" />
</root>
</log4net>
</configuration>
Run Code Online (Sandbox Code Playgroud)

我使用此代码来设置配置文件.

FileInfo file = new FileInfo(configPath);
log4net.Config.XmlConfigurator.Configure(file);
file = null;
Run Code Online (Sandbox Code Playgroud)

就像我说的,FileAppender效果很好.但我似乎无法得到任何事件.我试过用这样的东西来获取MemoryAppender.

Hierarchy hierarchy = LogManager.GetRepository() as Hierarchy;
MemoryAppender mappender = hierarchy.Root.GetAppender("MemoryAppender") as MemoryAppender;
Run Code Online (Sandbox Code Playgroud)

我尝试过使用:

var events = mappender.GetEvents()
Run Code Online (Sandbox Code Playgroud)

记录某些内容后,事件始终为空.我已经尝试在代码中设置FileAppender和MemoryAppender而不是使用配置文件,我得到相同的,FileAppender工作正常,但似乎无法从MemoryAppender获取任何事件.好奇,如果我理解MemoryAppender吧?我还尝试设置一个循环检查GetEvents不为空的线程,并且在注销时它总是返回空.我已经尝试在MemoryAppender上将Threshold设置为Core.Level.All,但这并未改变任何内容.

谢谢你的任何指示.我环顾四周,从我见过的网站上,我无法分辨出我在做些什么.

即便是像这样简单的东西也行不通.事件长度始终为零;

public partial class MainWindow : Window {
    public MainWindow() {
        InitializeComponent();

        MemoryAppender appender = new MemoryAppender();
        ILog logger = LogManager.GetLogger("foo");
        BasicConfigurator.Configure(appender);

        logger.Error("Should work");
        var events = appender.GetEvents();
    }
}
Run Code Online (Sandbox Code Playgroud)

Ral*_*oss 10

对于那些需要它的人来说,这里是如何在C#中以编程方式进行的:

var memoryAppender = new MemoryAppender();
var repository = (log4net.Repository.Hierarchy.Hierarchy)LogManager.GetRepository();
repository.Root.AddAppender(memoryAppender);
var events = memoryAppender.GetEvents();
Run Code Online (Sandbox Code Playgroud)


Ter*_*rco 1

我想到了。我错误地使用了 Compact Framework .dll。一旦我意识到我切换到 .net 2.0 版本,这会导致找不到 log4net 命名空间的问题,所以我对此进行了搜索,并意识到我需要将我的 .net Framework 4 客户端配置文件更改为 .net Framework 4。我现在正在按预期收到事件。