按网络资料,在C# winform应用程序中使用log4net组建输出日志。
1、引用log4net.dll
2、在AssemblyInfo.cs中增加[assembly: log4net.Config.XmlConfigurator(Watch = true)],如果log4net的配置在另外独立的log4net.config文件中,则在AssemblyInfo.cs中增加[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log4Net.config",Watch = true)];
3、在程序默认的app.config文件中增加log4net的配置:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections>
<log4net>
<appender name="errorAppender" type="log4net.Appender.RollingFileAppender">
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="ERROR" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
<file value="Logs\err.log" />
<encoding value="utf-8"/>
<preserveLogFileNameExtension value="true" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
。。。
<logger name="ALLLOG">
<level value="ALL" />
<appender-ref ref="errorAppender" />
</logger>
</log4net>
。。。
</configuration>
在程序中:
log4net.ILog log = log4net.LogManager.GetLogger("ALLLOG");//获取一个日志记录器
log.Info(DateTime.Now.ToString() + ": login success");//写入一条新log
没有生成任何日志文件!!!NND怎么回事?反复调测,查看配置和代码,都没有任何问题。最终看VS的调试启动过程的输出信息发现N个错误:
。。。
--- 内部异常堆栈跟踪的结尾 ---
在 System.Configuration.ConfigurationManager.PrepareConfigSystem()
在 System.Configuration.ConfigurationManager.get_AppSettings()
在 log4net.Util.SystemInfo.GetAppSetting(String key)
log4net:ERROR Exception while reading ConfigurationSettings. Check your .config file is well formed XML.
System.Configuration.ConfigurationErrorsException: 配置系统未能初始化 ---> System.Configuration.ConfigurationErrorsException: 每个配置文件中只允许存在一个 <configSections> 元素,并且,如果存在该元素,它还必须是根 <configuration> 元素的第一个子元素。 (D:\。。。.vshost.exe.config line 6)
看到没有?坑爹的设计啊,log4net要求configSections元素要在配置文件的第一个子元素位置。
于是把VS默认生成的startup元素移动到文件末尾,重新运行程序。一切ok!!!!
网络上的资料很多人提无法生成日志文件,是别的原因引起的,没发现大家提到这个configSections元素位置的问题。故记录下来,希望对需要的人有帮助。
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/mzyqyyjpx/article/details/52981570