我们在XAML应用程序中使用log4net,我们现在遇到一个问题,我们在初始化log4net之前遇到异常。 XAML应用程序中的第一个代码在哪里执行?
我们现在将它放在App.xaml.cs中,其中App.xaml是:
<Application x:Class="Trebuchet.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="MainWindow.xaml" Startup="Application_Startup">
<Application.Resources>
</Application.Resources>
</Application>
相关的App.xaml.cs是:
private static ILog log;
private void Application_Startup(object sender, StartupEventArgs e)
{
XmlConfigurator.Configure();
log = LogManager.GetLogger(typeof (App));
log.Info(string.Format("Trebuchet version {0} started", Assembly.GetExecutingAssembly().GetName().Version));
SetDevenvPaths();
System.Windows.Forms.Application.ThreadException += Application_ThreadException;
System.Windows.Forms.Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
}
或者还有其他原因导致log4net在xaml下遇到麻烦吗?对于发生这种情况的情况(仅在一台计算机上),我创建了一个简单的命令行C#app,它创建了一个日志文件并写入正常。所以它是这个应用程序特有的东西。
更新:和app.exe.config文件:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821"/>
</configSections>
<log4net>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="C:\Catapult.log"/>
<param name="AppendToFile" value="true"/>
<param name="MaxSizeRollBackups" value="2"/>
<param name="MaximumFileSize" value="100KB"/>
<param name="RollingStyle" value="Size"/>
<param name="StaticLogFileName" value="true"/>
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] ac.server %-5p %c - %m%n"/>
</layout>
</appender>
<root>
<level value="DEBUG"/>
<appender-ref ref="RollingFileAppender"/>
</root>
</log4net>
</configuration>
答案 0 :(得分:0)
您未在配对中按属性配置lognet的任何原因:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
然后无需在您的Application_Startup方法中放置Configure。