Log4net中的RollingFileAppender解析 --http://blog.csdn.net/wuhuiran/archive/2009/02/25/3935311.aspx
2009-02-26 11:53
489 查看
Log4日志组件的应用确实简单实用,在比较了企业库和Log4的日志功能后,个人觉得Log4的功能更加强大点.补充说明下,我使用的企业库是2.0版本,Log4net是1.2.1版本的.
在Log4net的应用上,已经有人做了说明分析了,在本文中,主要解析下Log4net中的RollingFileAppender的应用.
主要参考了Log4net的帮助文档.在项目中的log4net-1.2.10\doc文件下有.
RollingFileAppender主要是基于FileAppender构建的,很多属性方法都是继承于FileAppender,所以在选项设置上,也有许多是相同的.
下面的例子使日志文件名为log.txt,日志文件名是以文件大小进行变换的,如果旧日志文件大小到100KB时,就会变换文件名为log.txt.1,log.txt.2,log.txt.3...,一直到10为止
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<!--日志文件名-->
<file value="log.txt"/>
<!--是否在文件中追加-->
<appendToFile value="true"/>
<!--按照文件的大小进行变换日志文件-->
<rollingStyle value="Size"/>
<!--最大变换数量-->
<maxSizeRollBackups value="10"/>
<!--最大文件大小-->
<maximumFileSize value="100KB"/>
<!--日志文件名是否为静态-->
<staticLogFileName value="true"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/>
</layout>
</appender>
下面的例子以时间周期变换日志文件名,每分钟都改变日志的文件名,日志文件名为logfileyyyyMMdd-HHmm,这里补充说明下,如果要在这个文件名后面加上.log后缀,必须使用转义字符,比如<datePattern value="yyyyMMdd-HHmm".log"" />
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<!--日志文件名开头-->
<file value="logfile" />
<!--是否追加到文件-->
<appendToFile value="true" />
<!--变换的形式为日期-->
<rollingStyle value="Date" />
<!--日期的格式-->
<datePattern value="yyyyMMdd-HHmm" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
下面的例子综合使用使用日期和文件大小变换日志文件名。
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<!--日志文件名开头-->
<file value="logfile" />
<!--是否追加到文件-->
<appendToFile value="true" />
<!--混合使用日期和文件大小变换日志文件名-->
<rollingStyle value="Composite" />
<!--日期的格式-->
<datePattern value="yyyyMMdd" />
<!--最大变换数量-->
<maxSizeRollBackups value="10" />
<!--最大文件大小-->
<maximumFileSize value="1MB" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
下面例子是在每次程序运行的时候,都会备份原先的日志文件,当运行的日志文件大于50G的时候才会变换日志文件名。
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<!--日志文件名-->
<file value="logfile.txt" />
<!--不追加到原文件-->
<appendToFile value="false" />
<!--以日志文件大小变换文件名-->
<rollingStyle value="Size" />
<!--最大变换数量,-1为不限制-->
<maxSizeRollBackups value="-1" />
<!--最大文件大小-->
<maximumFileSize value="50GB" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
下面是RollingFileAppender类中的部分Public Instance Properties(公共属性)的说明,没有全部测试,难免谬误,如果你知道,请不要吝啬告写。
CountDirection : 定义当前文件是最小编号的文件还是最大编号的文件。默认为-1,总是以更小的编号。
datePattern : DateFormatter日期格式,string类型。
Encoding : 就是文件的编码,默认为Default,就是程序本身的编码了。
FilterHead : 分割符头部。
ImmediateFlush : 表示是否立即输出到文件,布尔型的。
LockingModel : 文件锁类型,RollingFileAppender本身不是线程安全的,如果在程序中没有进行线程安全的限制,可以在这里进行配置,确保写入时的安全。有两中类型:FileAppender.ExclusiveLock 和 FileAppender.MinimalLock
Name : 设置本Appander的名称。
SecurityContext : 比较少应用,对日志进行加密只类的,使用SecurityContextProvider转换。(对日志的保密要求比较高的时候应该可以应用上吧,Log4考虑的还挺周全)
Threshold : 设置内容级别的,比如:DEBUG,INFO等等。
在Log4net的配置中有两种方法是等价的:
<param name="File" value="log.txt" /> 和
<File value="log.txt" />
个人更倾向后者。在一些数据库上的应用时还有许多Param呢。
追加:懒人ABC使用后的一些例子
//******************************************************************************
// @file RealEstateRollingFileAppender.cs
// @namespace RealEstate.Common.Log
// @brief RealEstateのFileAppender
// @version 1.0
// @date 2009/03/12
// @author Design : XXX/2009/03/12
// @author Code : XXX/2009/03/12
// @author Modify : XXX/2009/03/12
// @note Module : Common
//******************************************************************************
using System;
using System.Collections.Generic;
using System.Text;
using log4net.Appender;
using log4net.Core;
namespace RealEstate.Common.Log
{
/// <summary>
/// ログファイルクラス
/// </summary>
public class RealEstateRollingFileAppender : RollingFileAppender
{
/// <summary>
/// ログが出力するかどうかのフラグ
/// </summary>
private bool printFlag = true;
/// <summary>
/// ログが出力するかどうかのフラグを取得、設定
/// </summary>
public bool PrintFlag
{
get { return printFlag; }
set { printFlag = value; }
}
/// <summary>
/// ログを出力する
/// </summary>
/// <param name="loggingEvent">ログ情報</param>
override protected void Append(LoggingEvent loggingEvent)
{
// ログが出力の場合
if (printFlag)
{
// ログレベルによって、ログを出力する
string loggerName = loggingEvent.Level.Name;
string name = base.Name;
if (loggerName == name)
{
base.Append(loggingEvent);
}
}
}
}
}
在Log4net的应用上,已经有人做了说明分析了,在本文中,主要解析下Log4net中的RollingFileAppender的应用.
主要参考了Log4net的帮助文档.在项目中的log4net-1.2.10\doc文件下有.
RollingFileAppender主要是基于FileAppender构建的,很多属性方法都是继承于FileAppender,所以在选项设置上,也有许多是相同的.
下面的例子使日志文件名为log.txt,日志文件名是以文件大小进行变换的,如果旧日志文件大小到100KB时,就会变换文件名为log.txt.1,log.txt.2,log.txt.3...,一直到10为止
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<!--日志文件名-->
<file value="log.txt"/>
<!--是否在文件中追加-->
<appendToFile value="true"/>
<!--按照文件的大小进行变换日志文件-->
<rollingStyle value="Size"/>
<!--最大变换数量-->
<maxSizeRollBackups value="10"/>
<!--最大文件大小-->
<maximumFileSize value="100KB"/>
<!--日志文件名是否为静态-->
<staticLogFileName value="true"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/>
</layout>
</appender>
下面的例子以时间周期变换日志文件名,每分钟都改变日志的文件名,日志文件名为logfileyyyyMMdd-HHmm,这里补充说明下,如果要在这个文件名后面加上.log后缀,必须使用转义字符,比如<datePattern value="yyyyMMdd-HHmm".log"" />
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<!--日志文件名开头-->
<file value="logfile" />
<!--是否追加到文件-->
<appendToFile value="true" />
<!--变换的形式为日期-->
<rollingStyle value="Date" />
<!--日期的格式-->
<datePattern value="yyyyMMdd-HHmm" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
下面的例子综合使用使用日期和文件大小变换日志文件名。
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<!--日志文件名开头-->
<file value="logfile" />
<!--是否追加到文件-->
<appendToFile value="true" />
<!--混合使用日期和文件大小变换日志文件名-->
<rollingStyle value="Composite" />
<!--日期的格式-->
<datePattern value="yyyyMMdd" />
<!--最大变换数量-->
<maxSizeRollBackups value="10" />
<!--最大文件大小-->
<maximumFileSize value="1MB" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
下面例子是在每次程序运行的时候,都会备份原先的日志文件,当运行的日志文件大于50G的时候才会变换日志文件名。
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<!--日志文件名-->
<file value="logfile.txt" />
<!--不追加到原文件-->
<appendToFile value="false" />
<!--以日志文件大小变换文件名-->
<rollingStyle value="Size" />
<!--最大变换数量,-1为不限制-->
<maxSizeRollBackups value="-1" />
<!--最大文件大小-->
<maximumFileSize value="50GB" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
下面是RollingFileAppender类中的部分Public Instance Properties(公共属性)的说明,没有全部测试,难免谬误,如果你知道,请不要吝啬告写。
CountDirection : 定义当前文件是最小编号的文件还是最大编号的文件。默认为-1,总是以更小的编号。
datePattern : DateFormatter日期格式,string类型。
Encoding : 就是文件的编码,默认为Default,就是程序本身的编码了。
FilterHead : 分割符头部。
ImmediateFlush : 表示是否立即输出到文件,布尔型的。
LockingModel : 文件锁类型,RollingFileAppender本身不是线程安全的,如果在程序中没有进行线程安全的限制,可以在这里进行配置,确保写入时的安全。有两中类型:FileAppender.ExclusiveLock 和 FileAppender.MinimalLock
Name : 设置本Appander的名称。
SecurityContext : 比较少应用,对日志进行加密只类的,使用SecurityContextProvider转换。(对日志的保密要求比较高的时候应该可以应用上吧,Log4考虑的还挺周全)
Threshold : 设置内容级别的,比如:DEBUG,INFO等等。
在Log4net的配置中有两种方法是等价的:
<param name="File" value="log.txt" /> 和
<File value="log.txt" />
个人更倾向后者。在一些数据库上的应用时还有许多Param呢。
追加:懒人ABC使用后的一些例子
//******************************************************************************
// @file RealEstateRollingFileAppender.cs
// @namespace RealEstate.Common.Log
// @brief RealEstateのFileAppender
// @version 1.0
// @date 2009/03/12
// @author Design : XXX/2009/03/12
// @author Code : XXX/2009/03/12
// @author Modify : XXX/2009/03/12
// @note Module : Common
//******************************************************************************
using System;
using System.Collections.Generic;
using System.Text;
using log4net.Appender;
using log4net.Core;
namespace RealEstate.Common.Log
{
/// <summary>
/// ログファイルクラス
/// </summary>
public class RealEstateRollingFileAppender : RollingFileAppender
{
/// <summary>
/// ログが出力するかどうかのフラグ
/// </summary>
private bool printFlag = true;
/// <summary>
/// ログが出力するかどうかのフラグを取得、設定
/// </summary>
public bool PrintFlag
{
get { return printFlag; }
set { printFlag = value; }
}
/// <summary>
/// ログを出力する
/// </summary>
/// <param name="loggingEvent">ログ情報</param>
override protected void Append(LoggingEvent loggingEvent)
{
// ログが出力の場合
if (printFlag)
{
// ログレベルによって、ログを出力する
string loggerName = loggingEvent.Level.Name;
string name = base.Name;
if (loggerName == name)
{
base.Append(loggingEvent);
}
}
}
}
}
相关文章推荐
- 我的log4net使用手册(转自 http://blog.csdn.net/lyjcn/archive/2009/08/11/4432833.aspx)
- 用DOM4j解析xml文件,获得所有节点信息 http://blog.csdn.net/yizhizouxiaqu/archive/2009/12/10/4977122.aspx
- 事务管理最佳实践全面解析(转)http://blog.csdn.net/shendl/archive/2006/11/27/1415958.aspx
- 解析“extern” (转自http://blog.csdn.net/keensword/archive/2005/06/23/401114.aspx)
- C++ 虚函数表解析(转自http://blog.csdn.net/haoel/archive/2007/12/18/1948051.aspx)
- Android初学者常见问题解析(1)(转http://blog.csdn.net/Alinaxz/archive/2010/04/19/5503214.aspx)
- 哈哈,收藏源代码(本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hakule/archive/2008/09/01/2861688.aspx)
- VC打印实践浅谈 (http://blog.csdn.net/colorknight/archive/2001/12/03/10623.aspx)
- 我心目中的牛程序员---http://blog.csdn.net/jirigala/archive/2010/03/02/5340655.aspx
- 我为何爱读代码?你为何也应当爱? http://blog.csdn.net/bvbook/archive/2011/02/16/6187192.aspx
- 面向对象的程序(http://blog.csdn.net/qi_jianzhou/archive/2006/03/31/646124.aspx)
- JFreeChart画雷达图、带刻度雷达图、蜘蛛网、带刻度蜘蛛网(转自:http://blog.csdn.net/guoquanyou/archive/2008/12/10/3488313.aspx)
- opencore的文件识别(http://blog.csdn.net/jinlking/archive/2009/04/20/4095415.aspx)
- http://blog.csdn.net/web518/archive/2005/04/21/356322.aspx
- window.event(转自:http://blog.csdn.net/cnkiminzhuhu/archive/2008/02/22/2112408.aspx)
- Eclipse_jboss00(http://blog.csdn.net/javamxj/archive/2005/01/13/251982.aspx)
- Android开发指南-框架主题-资源和资产 (转http://blog.csdn.net/iefreer/archive/2009/09/06/4526004.aspx)
- http://blog.csdn.net/metababy/archive/2006/02/28/612102.aspx
- http://blog.csdn.net/lizanhong/archive/2004/07/15/42459.aspx
- setprecision()与setiosflags() (转载http://blog.csdn.net/yunhaiC/archive/2008/03/11/2167462.aspx)