Log4net生成文件的两种规则

Log4net生成文件的两种规则

前言

最近在设计一个日志采集框架,使用Elastic Stack,FileBant组件部署在工作站上不断的把日志数据推送到logstash,大致的框架是这样的
在这里插入图片描述

log4net是什么?

log4net是.Net下最广泛使用的日志采集框架,是java语言下log4j的克隆版

为什么要研究文件生成的规则?

log4net默认的文件生成规则是:假如第一个文件是 test.log,第二个文件生成的时候log4net会把第一个日志文件改成 test.log.0,并生成 test.log,在生成多个文件之后, 目录下有 test.log、test.log.0、test.log.1…test.log.n,并且test.log.n是最早生成的日志文件
在这里插入图片描述

那么,问题就来了,FileBeat会无法检测出 test.log 为最新的日志,反而会不断重复发送最旧的日志,这样的效果不是我们想要的,通过翻看log4net的源代码,是可以用过配置参数更改生成日志文件的规则,来实现 test.log.0、test.log.1…test.log.N的文件规则,这个参数就是CountDirection,默认是-1,设置为大于或等于0,即可

RollingFileAppender.cs

/// <summary>
		/// Gets or sets the rolling file count direction. 
		/// </summary>
		/// <value>
		/// The rolling file count direction.
		/// </value>
		/// <remarks>
		/// <para>
		/// Indicates if the current file is the lowest numbered file or the
		/// highest numbered file.
		/// </para>
		/// <para>
		/// By default newer files have lower numbers (<see cref="CountDirection" /> &lt; 0),
		/// i.e. log.1 is most recent, log.5 is the 5th backup, etc...
		/// </para>
		/// <para>
		/// <see cref="CountDirection" /> &gt;= 0 does the opposite i.e.
		/// log.1 is the first backup made, log.5 is the 5th backup made, etc.
		/// For infinite backups use <see cref="CountDirection" /> &gt;= 0 to reduce 
		/// rollover costs.
		/// </para>
		/// <para>The default file count direction is -1.</para>
		/// </remarks>
		public int CountDirection
		{
			get { return m_countDirection; }
			set { m_countDirection = value; }
		}

对应的 log4net 配置

<appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
      <param name="File" value="C:\\Log\\" />
      <param name="AppendToFile" value="true" />
      <!--<param name="MaxFileSize" value="10240" />-->
      <param name="maximumFileSize" value="2KB" />
      <param name="MaxSizeRollBackups" value="100" />
      <param name="StaticLogFileName" value="false" />
      <!--CountDirection 默认为-1,将值改为大于0就可以自动递增生成新的文件了-->
      <param name="CountDirection" value="1" />
      <param name="DatePattern" value="yyyyMM\\yyyyMMdd'.txt'" />
      <param name="RollingStyle" value="Composite" />
	  <!--省略其他配置-->
    </appender>

总结

log4net优点功能非常强大,对应的缺点就是配置比较多,我搜索了好久都没查到CountDirection这个参数,还好查看源代码发现了。
另外我拿源代码增加了一个 JsonLaout的类,让log4net支持Json格式输出,链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值