Log4net 附加程序被另一个进程覆盖
Log4net appenders overwritten by another process
我有一个使用 log4net 的应用程序。但是,当我显示 SaveFileDialog 时,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
当我从这些新的附加程序中找到日志文件时,我可以看到我丢失的日志正在那里。
有谁知道这是怎么回事,如何避免?
您必须查看 log4net 调试日志才能了解发生了什么。看起来你有多个地方 configure/reconfigure 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>
我有一个使用 log4net 的应用程序。但是,当我显示 SaveFileDialog 时,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
当我从这些新的附加程序中找到日志文件时,我可以看到我丢失的日志正在那里。
有谁知道这是怎么回事,如何避免?
您必须查看 log4net 调试日志才能了解发生了什么。看起来你有多个地方 configure/reconfigure 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>