下面是我成功使用的过程。
首先去网站下载好log4net-1.2.10源码,编译源码前要进行以下修改:
1.在源码项目添加“System.configuration”空间引用
2.在项目属性的生成标签页中(log4net项目按右键,点属性,选生成标签),将条件编译符号定义修改成:NET;NET_2_0;NET_4_0
同时修改输出路径为../build/bin/net/4.0/debug/
3.在项目属性的应用程序标签页中,将目标框架修改成.NET Framework 4, 注意使用 .NET 4 Client Profile 将导致有问题。
4.在项目的config目录下找到 XmlConfigurator.cs,打开它,在 623行左右替换 settings.ProhibitDtd = false; 在#elif NET_2_0 判断后加入.Net4新属性,修改成如下:
#elif NET_2_0
// Allow the DTD to specify entity includes
XmlReaderSettings settings = new XmlReaderSettings();
#if NET_4_0
settings.DtdProcessing = DtdProcessing.Parse;
#else
settings.ProhibitDtd = false;
#endif
5.修改项目中的AssemblyInfo.cs文件
首先修改代码34行左右,将其改为如下:
#if (!NETCF && !NET_4_0)
//
// If log4net is strongly named it still allows partially trusted callers
//
[assembly: System.Security.AllowPartiallyTrustedCallers]
#endif
接着在 AssemblyInfo.cs 的Assembly Title 部份增加 .Net4,即#elif (NET_2_0)前,大约在53行左右,修改如下:
#elif (NET_4_0)
[assembly: AssemblyTitle("log4net for .NET Framework 4.0")]
#elif (NET_2_0)
[assembly: AssemblyTitle("log4net for .NET Framework 2.0")]
好了。现在应该可以编译log4net了。
对于log4net的使用
1.将你的VS2010项目的目标框架设为.NET Framework 4;
2.接着引用log4net.dll;
3.然后设置你的app.config,注意:右键 app.config文件点击【属性】,在属性窗口中将‘复制到输出目录’改为‘如果较新则复制’
或者你可以手动将 app.config 文件复制到你应用程序输出目录。如果不这样做 log4net 组件是找不到配置文件的,但是它本身不会报错。就是不会出现日志信息具体的配置。以下是我的配置示例如下:
<?xml version="1.0"?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net-net-4.0" />
</configSections>
<log4net>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="Log\Log.txt" />
<param name="AppendToFile" value="true" />
<param name="MaxSizeRollBackups" value="100" />
<param name="MaximumFileSize" value="2MB" />
<param name="RollingStyle" value="Size" />
<param name="StaticLogFileName" value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%-5p %d [%c] %m%n" />
</layout>
</appender>
<root>
<level value="all" />
<appender-ref ref="RollingLogFileAppender" />
</root>
</log4net>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
</startup>
</configuration>
4.在项目的AssemblyInfo.cs文件中添加如下语句:
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
通过上面的配置就可以使用了。
我们可以在窗体上测试一下:
private void Form1_Load(object sender, EventArgs e)
{
log4net.ILog LOG = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
log.Debug("test");
}
很好,一运行,log.txt就生成了。
//如果要记录所有未捕捉的异常,修改Program.cs如下
static class Program
{
static log4net.ILog LOG = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
//捕获未处理异常
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
// 捕获完毕 [5/21/2012 Administrator]
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
LOG.Error(e.Exception);
MessageBox.Show(e.Exception.Message, "线程异常", MessageBoxButtons.OK, MessageBoxIcon.Error);
Application.Exit();
}
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
Exception ex = e.ExceptionObject as Exception;
LOG.Error(ex);
MessageBox.Show(ex.Message, "应用程序异常", MessageBoxButtons.OK, MessageBoxIcon.Error);
Application.Exit();
}
}