log4net简单的配置以及在配置过程中遇到的问题
这一篇博客主要是为了记录我在初接触log4net,进行相关的配置时遇到的一个问题
前面加了我自己做的学习log4net的学习笔记,写的比较粗略,不适用于做学习的参考,主要看最后一部分遇到的那一个问题
希望能通过我的记录帮助到和我一样的学习者们
实例
配置样例(将日志写入回滚文件)在CS程序的App.config或者BS程序的Web.config里配置:
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections>
<configuration>
<log4net>
<root>
<level value="WARN"/>
<appender-ref="ReflectionLayout"/>
<appender-ref="ConsoleAppender"/>
</root>
<logger name="App_Data" additivity="false">
<level value="DEBUG"/>
<appender-ref ref="ReflectionLayout"/>
<appender-ref ref="ConsoleAppender"/>
</logger>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d %n%m%n"/>
</layout>
</appender>
<appender name="ReflectionLayout" type="log4net.Appender.RollingFileAppender,log4net">
<!-- 日志文件的路径,此处代表日志文件写在当前项目运行路径下的logs文件夹中,如果不存在logs则自动创建-->
<param name="File" value="logs/"/>
<!-- 是否追加到文件-->
<param name="AppendToFile" value="true"/>
<!-- 记录日志写入文件时,不锁定文本文件,防止多线程时不能写log-->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<!-- 使用UTF-8编码-->
<Encoding value="UTF-8"/>
<!-- 最多产生的日志文件数,如果超过数量只会保留最新的n个,-1表示无数量限制-->
<param name="MaxSizeRollBackups" value="-1"/>
<!-- 是否只写到一个文件中-->
<param name="StaticLogFileName" value="false"/>
<!-- 按照何种方式产生多个日志文件(日期[date],文件大小[size],混合[composite]),我这里用的是按照日期产生日志文件-->
<param name="RollingStyle" value="date"/>
<!-- 按日期生成文件夹,并在文件名前也加上日期-->
<param name="DatePattern" value="yyyyMMdd-HHmm"-test.txt""/>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="DEBUG"/>
<param name="LevelMax" value="WARN"/>
</filter>
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d %n%m%n"/>
</layout>
</appender>
</log4net>
</configuration>
使用log4net记录日志的例子(C#):
log4net.ILog log = log4net.LogManager.GetLogger("App_Data");
log.Info("test");
需要注意的是,如果是CS程序,要在根目录的Program.cs的Main方法中加上
log4net.Config.XmlConfigurator.Configure();
如果是BS程序,要在根目录的Global.asax.cs(没有新建一个)中的Application_Start方法中加上
log4net.Config.XmlConfigurator.Configure();
无论是BS还是CS程序,都可以直接在项目的AssemblyInfo.cs中添加以下语句:
[assembly:log4net.Config.XmlConfigurator()]
运行上面的例子,就在此项目的运行目录下的logs文件夹中创建了以当前日期为名称的文件夹,并在其中创建了名为"当前时间-test.txt"的文件,文件内容为
2020-10-23 10:21:46,493
test
详解
-
配置
-
<root>
实际上就是一个根logger,所有其他的logger都默认继承它
支持的子元素:
appender-ref 0个或多个,表示要引用的appender的名字 level 最多一个,只有在这个级别或之上的时间才能被记录 param 0个或多个,设置一些参数 -
<logger>
logger直接与应用程序交互,是日志的产生者,产生日志后由它引用的Appender记录到指定的媒介,并由Layout控制输出格式
属性:
name logger的名字,必须有 additivity 可选,默认值为true。设置成false将阻止父logger中的appender 子元素:
appender-ref 引用的appender的名字 level 只有在这个级别或以上的事件才会被记录 param 0个或多个,设置一些参数 -
<appender>
负责记录日志的组件,定义日志的输出方式,常见的输出方式有记录到控制台(ConsoleAppender)、记录到文件(FileAppender)、记录到回滚文件(RollingFileAppender)等
属性:
name Appender的名字 type 输出方式的类型 子元素:
filter 定义此app使用的过滤器 layout 最多一个,定义appender的输出格式 param 设置一些参数
-
配置时遇到的问题
<configSections>标签必须定义在<configuration>标签内,最多只能有一个,而且如果有的话必须是<configuration>下的第一个子元素
我刚开始就犯了这个错误,没有把<configSections>标签写在第一个的位置,试了好久都写不出日志文件。而这一点在我学习过程中找到的资料中都没有强调,我觉得可能会有其他人也在这里出问题,所以就把它记录下来,提供参考。