加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 仅在滚动文件的顶部包含一次标头

发布时间:2020-12-15 08:05:45 所属栏目:百科 来源:网络整理
导读:是否可以仅在滚动文件的顶部包含标题信息? 我有以下配置文件: appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender" file value="d:tempTTTest.log"/ layout type="log4net.Layout.PatternLayout" header value="[Header]#
是否可以仅在滚动文件的顶部包含标题信息?

我有以下配置文件:

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
            <file value="d:tempTTTest.log"/>
            <layout type="log4net.Layout.PatternLayout">
                <header value="[Header]&#13;&#10;" />
                <param name="ConversionPattern" value="%-25utcdate{dd/MM/yyyy HH:mm:ss.fff}%-20property{log4net:HostName}%-30logger%-30thread%-7level%message%newline"/>
            </layout>
            <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
            <maximumFileSize value="5MB"/>
            <rollingStyle value="Size"/>
            <maxSizeRollBackups value="-1"/>
            <countDirection value="1"/>
        </appender>

当我运行我的应用程序时,例如两次我得到两次标题信息,例如

[Header] 
 The Log line
 [Header]
 The Log line 
 etc

我希望实现以下目标:

[Header] 
 The Log line
 The Log line 
 etc

解决方法

我发现这样做最简单的方法是创建一个继承自RollingFileAppender的类,并像这样覆盖WriteHeader方法:
using System.IO;
using System.Text;
using log4net.Core;
using log4net.Layout;
using log4net.Util;
using log4net.Appender;

namespace CsvLogging
{
    public class HeaderOnceAppender : RollingFileAppender 
    {
        protected override void WriteHeader()
        {
            if (LockingModel.AcquireLock().Length == 0)
            {
                base.WriteHeader();
            }
        }
    }
}

然后使用此类作为appender:

<appender name="CsvFileAppender" type="CsvLogging.HeaderOnceAppender">

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读