Log4net appenders被另一个进程覆盖

时间:2016-12-02 12:25:16

标签: c# logging log4net log4net-appender

我有一个使用log4net的应用程序。但是,当我显示SaveFileDialog时,appender会被另一个进程覆盖。看看新的appender,我相信这是因为它们来自处理图标叠加的进程(因为他们使用的日志文件被称为" icon-overlays.log")我在我的应用程序中打开了资源管理器

示例:

Log.Fatal("Before dialog");// logs fine

SaveFileDialog newFileDialog = new Microsoft.Win32.SaveFileDialog();

Log.Fatal("Open dialog");//logs fine

var appenders1 = Log.Logger.Repository.GetAppenders();//shows appenders from my config

if (newFileDialog.ShowDialog() == false)
{
    Log.Fatal("Cancelled dialog");//does not log
    return;
}

var appenders2 = Log.Logger.Repository.GetAppenders();//shows appenders from other process
Log.Fatal("New database selected");//does not log

当我从这些新的appender中找到日志文件时,我可以看到我遗漏的日志就在那里。

有谁知道这是怎么回事,以及如何避免它?

1 个答案:

答案 0 :(得分:2)

您必须查看log4net调试日志才能看到发生了什么。看起来你有多个地方配置/重新配置log4net并在打开对话框时点击这个地方。

启用内部调试:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appSettings>
        <add key="log4net.Internal.Debug" value="true"/>
    </appSettings>
</configuration>

写入特定文件:

<configuration>
    ...

    <system.diagnostics>
        <trace autoflush="true">
            <listeners>
                <add 
                    name="textWriterTraceListener" 
                    type="System.Diagnostics.TextWriterTraceListener" 
                    initializeData="C:\tmp\log4net.txt" />
            </listeners>
        </trace>
    </system.diagnostics>

    ...
</configuration>