log4net简单的配置以及在配置过程中遇到的问题

这篇博客记录了作者在配置log4net时遇到的问题,包括配置样例、配置细节和常见错误。在配置log4net以将日志写入回滚文件时,需注意<configSections>标签的位置,它必须是<configuration>下的第一个子元素,否则可能导致配置失败。作者希望通过分享自己的经验,帮助其他学习者避免类似问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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&quot;-test.txt&quot;"/>
            <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

详解

  1. 配置

    • <root>

      实际上就是一个根logger,所有其他的logger都默认继承它

      支持的子元素:

      appender-ref0个或多个,表示要引用的appender的名字
      level最多一个,只有在这个级别或之上的时间才能被记录
      param0个或多个,设置一些参数
    • <logger>

      logger直接与应用程序交互,是日志的产生者,产生日志后由它引用的Appender记录到指定的媒介,并由Layout控制输出格式

      属性:

      namelogger的名字,必须有
      additivity可选,默认值为true。设置成false将阻止父logger中的appender

      子元素:

      appender-ref引用的appender的名字
      level只有在这个级别或以上的事件才会被记录
      param0个或多个,设置一些参数
    • <appender>

      负责记录日志的组件,定义日志的输出方式,常见的输出方式有记录到控制台(ConsoleAppender)、记录到文件(FileAppender)、记录到回滚文件(RollingFileAppender)等

      属性:

      nameAppender的名字
      type输出方式的类型

      子元素:

      filter定义此app使用的过滤器
      layout最多一个,定义appender的输出格式
      param设置一些参数

配置时遇到的问题

<configSections>标签必须定义在<configuration>标签内,最多只能有一个,而且如果有的话必须是<configuration>下的第一个子元素

我刚开始就犯了这个错误,没有把<configSections>标签写在第一个的位置,试了好久都写不出日志文件。而这一点在我学习过程中找到的资料中都没有强调,我觉得可能会有其他人也在这里出问题,所以就把它记录下来,提供参考。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值