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元素位置的问题。故记录下来,希望对需要的人有帮助。
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元素位置的问题。故记录下来,希望对需要的人有帮助。
相关文章推荐
- C#中使用Log4net日志输出到本地文件、Textbox或Listview
- 解决log4net独占日志文件的问题以及 log4net的各种输出配置(Appender)
- 使用kibana可视化报表实时监控你的应用程序,从日志中找出问题,解决问题
- C#中使用log4net框架做日志输出
- (六)Net Core项目使用Controller之一 c# log4net 不输出日志 .NET Standard库引用导致的FileNotFoundException探究 获取json串里的某个属性值 common.js 如何调用common.js js 筛选数据 Join 具体用法
- C#使用Log4net输出日志
- 解决log4net独占日志文件的问题以及 log4net的各种输出配置(Appender)
- 解决log4net独占日志文件的问题以及 log4net的各种输出配置(Appender)
- 解决log4net独占日志文件的问题以及 log4net的各种输出配置(Appender)
- 带输出参数的存储过程的使用及在C#中调用问题
- C#中使用多线程访问Winform问题解决方案
- 在C# 中不使用递归解决“数独”问题的一种方案
- 解决限制使用应用程序问题
- 请教一个问题,Log4Net记录日志到Oracle显示中文乱码如何解决?
- asp.net c#的传参中经常使用到中文参数的处理,下面的函数可以解决中文参数的问题
- Berkeley DB - 解决让多个日志重复使用的问题
- C#中使用多线程访问Winform问题解决方案
- 完美解决事件查看器中查看应用程序日志导致MMC.EXE出错问题
- log4j日志文件:解决只有控制台输出没有文件输出的问题!