包括在一个轧制文件顶部标题只有一次 [英] Include header only once at the top of a rolling file

查看:121
本文介绍了包括在一个轧制文件顶部标题只有一次的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

是否有可能只包括滚动文件的顶部头信息



我有以下的配置文件:

 <追加程序名称=RollingFileAppender进行TYPE =log4net.Appender.RollingFileAppender> 
<文件值=D:\temp\TTTest.log/>
<布局类型=log4net.Layout.PatternLayout>
<标头值=[页眉]放大器;#13;&安培;#10; />
< PARAM NAME =ConversionPattern值=% - 25utcdate {DD / MM / YYYY HH:MM:SS.FFF}% - 20property {log4net的:主机名}% - 30logger%-30thread%-7level%消息换行符%/>
< /布局>
< lockingModel TYPE =log4net.Appender.FileAppender + MinimalLock/>
< maximumFileSize值=5MB/>
< rollingStyle值=大小/>
< maxSizeRollBackups值= - 1/>
< countDirection值=1/>
< /附加器>

当我跑我的应用程序,例如两次,我得到的头信息的两倍如

  [标题] 
日志行
[标题]
日志行

我期待实现以下目标:

  [标题] 
日志行
日志行


解决方案

我发现这样做是为了创建一个从RollingFileAppender进行继承,并覆盖这样的WriteHeader方法的类最简单的方法:

 使用System.IO; 
使用System.Text;
使用log4net.Core;
使用log4net.Layout;
使用log4net.Util;
使用log4net.Appender;

命名空间CsvLogging
{
公共类HeaderOnceAppender:RollingFileAppender进行
{
保护覆盖无效WriteHeader()
{
如果( 。LockingModel.AcquireLock()长度== 0)
{
base.WriteHeader();
}
}
}
}



然后使用这个类的附加目的地:

 <追加程序名称=CsvFileAppenderTYPE =CsvLogging.HeaderOnceAppender> 


Is it possible to only include header information at the top of a rolling file?

I have the following config file:

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
            <file value="d:\temp\TTTest.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>

When I run my application, for example twice I get header information twice e.g.

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

I am looking to achieve the following:

 [Header] 
 The Log line
 The Log line 
 etc

解决方案

The easiest way I've found to do this is to create a class that inherits from RollingFileAppender and overwrites like this the WriteHeader method :

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();
            }
        }
    }
}

then use this class as appender :

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

这篇关于包括在一个轧制文件顶部标题只有一次的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆