您的位置:首页 > 编程语言 > C#

c#应用程序使用log4net组建输出不了日志问题的解决

2016-10-31 13:35 411 查看
按网络资料,在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元素位置的问题。故记录下来,希望对需要的人有帮助。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐