【问题标题】:Log4net appenders overwritten by another processLog4net appenders 被另一个进程覆盖
【发布时间】:2016-12-02 12:25:15
【问题描述】:

我有一个使用 log4net 的应用程序。但是,当我显示 SaveFileDialog 时,附加程序会被另一个进程覆盖。查看新的附加程序,我相信这是因为它们来自处理图标覆盖的进程(因为它们使用的日志文件称为“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

当我从这些新的附加程序中找到日志文件时,我可以看到我丢失的日志正在那里。

有谁知道这是怎么发生的,以及如何避免它?

【问题讨论】:

  • 听起来像是一个有问题的 shell 扩展。图标覆盖将指向更改图标的程序,例如 Dropbox。 (虽然我有 Dropbox,但我没有看到这个问题)
  • 这也是我的假设,但我不知道如何处理它。有问题的程序是 Box Sync。
  • 将它作为错误报告给 Box,或者看看他们是否已经修复它。
  • 一种选择是在调用 SaveFileDialog 后重新加载配置。

标签: c# logging log4net log4net-appender


【解决方案1】:

您必须查看 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>

【讨论】:

  • 使用这个,我现在已经确认是 Box Sync 覆盖了我的 appenders,我会与他们取得联系。
  • 选择这个因为它可以帮助我诊断我的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-31
  • 2013-06-06
  • 1970-01-01
  • 2015-05-11
  • 1970-01-01
相关资源
最近更新 更多