黑马程序员—关于C#系统日志的写法(2)—强大的Log4Net类

----------------------Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------

 关于log4Net类的使用心得

————————巧妙的运用log4net类,来为你的系统添加点睛之笔------————————————————

 

系统日志,是现如今的系统之中必不可少的一项功能,它可以完美的记录系统当前的运行状况,以及错误报告,登录人员所做的操作,并可以以文本流或者数据库的方式存储。

方便维护人员和开发人员的查看。

 

下面我来介绍下log4Net的用法:

1.首先我们需要在网站或者程序中的配置文件中配置好Log4Net的配置节(这里以Web网站为例):

 

在网站的web.config 配置文件中添加Log4Net的配置节:

 

<!-- ===============log4net add start2=============== -->
	<log4net debug="false">
		<!--以文件方式输出并保存到d:\Application.log.txt-->
		<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
			<param name="File" value="d:\Application.log.txt"/>
			<param name="datePattern" value="MM-dd HH:mm"/>
			<param name="AppendToFile" value="true"/>
			<layout type="log4net.Layout.PatternLayout">
				<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
			</layout>
		</appender>
		<!--以跟踪方式 Asp.net trace方式查看-->
		<appender name="HttpTraceAppender" type="log4net.Appender.ASPNetTraceAppender">
			<layout type="log4net.Layout.PatternLayout">
				<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
			</layout>
		</appender>
		<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
			<layout type="log4net.Layout.PatternLayout">
				<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
			</layout>
		</appender>
		<!--以流的方式输出并保存至文本-->
		<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
			<!--输出方式的一种:文本保存到"E:\DCLog\yyyy-MM\yyyy-MM-dd.LOG"中-->
			<file value="E:\Log\"/>
			<datePattern value="yyyy-MM/yyyy-MM-dd.LOG"/>
			<appendToFile value="true"/>
			<rollingStyle value="Date"/>
			<staticLogFileName value="false"/>
			<layout type="log4net.Layout.PatternLayout">
				<param name="ConversionPattern" value="%date [%-5level] %n -- %m%n"/>
			</layout>
			<!--输出方式的另一种:文本保存到"D:\Log.txt"中
			<param name="File" value="D:\Log.txt"/>
			<param name="AppendToFile" value="true"/>
			<param name="MaxSizeRollBackups" value="10"/>
			<param name="MaximumFileSize" value="5MB"/>
			<param name="RollingStyle" value="Size"/>
			<param name="StaticLogFileName" value="true"/>
			<layout type="log4net.Layout.PatternLayout">
				<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
			</layout>
			-->
		</appender>
		<!--以数据库的方式输出,插入到SQL数据库(此处以SQL SERVER为例) -->
		<appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
			<bufferSize value="0" />
			<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
			<connectionString value="server=.;database=JD_Test;uid=sa;pwd=123;timeout=300;" />
			<commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
			<parameter>
				<parameterName value="@log_date" />
				<dbType value="DateTime" />
				<layout type="log4net.Layout.RawTimeStampLayout" />
			</parameter>
			<parameter>
				<parameterName value="@thread" />
				<dbType value="String" />
				<size value="50" />
				<layout type="log4net.Layout.PatternLayout">
					<conversionPattern value="%t" />
				</layout>
			</parameter>
			<parameter>
				<parameterName value="@log_level" />
				<dbType value="String" />
				<size value="200" />
				<layout type="log4net.Layout.PatternLayout">
					<conversionPattern value="%p" />
				</layout>
			</parameter>
			<parameter>
				<parameterName value="@logger" />
				<dbType value="String" />
				<size value="200" />
				<layout type="log4net.Layout.PatternLayout">
					<conversionPattern value="%logger" />
				</layout>
			</parameter>
			<parameter>
				<parameterName value="@message" />
				<dbType value="String" />
				<size value="2000" />
				<layout type="log4net.Layout.PatternLayout">
					<conversionPattern value="%m" />
				</layout>
			</parameter>
			<parameter>
				<parameterName value="@exception" />
				<dbType value="String" />
				<size value="2000" />
				<layout type="log4net.Layout.ExceptionLayout" />
			</parameter>
		</appender>
		<logger name="MyADOAppender">
			<level value="DEBUG" />
			<appender-ref ref="ADONetAppender" />
		</logger>
		<logger name="MyFileAppender">
			<level value="DEBUG" />
			<appender-ref ref="RollingLogFileAppender"/>
		</logger>
		<root>
			<level value="ALL" />
		</root>
		<!--<root>
			<level value="ALL"/>
			value="日志级别(OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL)"
			<appender-ref ref="ADONetAppender"/> 
			ref="你所有的appender节点的name名称"
		</root>-->
	</log4net>
	<!-- ===============log4net add end2=============== -->
appender配置节的各种使用意义:

AspNetTraceAppender 

<appender name="AspNetTraceAppender" type="log4net.Appender.AspNetTraceAppender" >
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
</appender>

这段配置可将日志信息输出到页面的Trace上下文环境。如果日志的级别低于WARN,会以System.Web.TraceContext.Write方法输出;如果级别为WARN或WARN以上则会以System.Web.TraceContext.Warn方法输出

 

BufferingForwardingAppender

<appender name="BufferingForwardingAppender" type="log4net.Appender.BufferingForwardingAppender" >
    <bufferSize value="5"/>
    <lossy value="true" />
    <evaluator type="log4net.Core.LevelEvaluator">
        <threshold value="WARN"/>
    </evaluator>
    <appender-ref ref="LogFileAppender" />
    <appender-ref ref="AspNetTraceAppender" />
</appender>

BufferingForwardingAppender的主要作用是将输出到指定类型(这里是LogFileAppender)的Appender的日志信息进行缓存。bufferSize属性指定了缓存的数量,如果value为5,那么将在信息量达到6条的时候,把这些日志批量输出。appender-ref属性指定了缓存的Appender类型,同root节点一样,这里可以指定多个。

 

FileAppender

<appender name="LogFileAppender" type="log4net.Appender.FileAppender" >
    <param name="File" value="WebUtilClient.log" />
    <param name="AppendToFile" value="true" />
    <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" />
    </layout>
</appender>


File指定了文件名称,可以使用相对路径,此时日志文件的位置取决于项目的类型(如控制台、Windows Forms、ASP.NET等);也可以使用绝对路径;甚至可以使用环境变量,如<file value="${TMP}\log-file.txt" />。
AppendToFile指定是追加到还是覆盖掉已有的日志文件。
还可以添加如下属性<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />来使用最小锁定模型(minimal locking model),以允许多个进程可以写入同一个文件。

    这里我只是去几个样例来讲解作为参考,其他很少用到的并未做讲解。

     更多的配置节信息,请参考这里:http://logging.apache.org/log4net/release/config-examples.html#smtpappender 

     英文不难,可自己翻译下。

 


2. 在程序中调用的时候要添加引用 using log4net;  这里的log4net的dll自己事先要添加到网站的引用中来。

     在程序中调用:

    
using log4net;
public class A
{
public void WriteExceptionLog(String messages)
        {
             //这里是 事先准备好的一个实体类,用来存日志信息的。
            Text_LogInfo  log = new Text_LogInfo ()
            {
                //其中一个属性。
                Messages = messages
            };
            //在写日志前,先要调用日志接口,用来获取web.config配置文件中的配置节
            ILog log2 = LogManager.Exists("MyFileAppender");
            log2.Warn(" 错误信息:" + log.Messages);
        }
}


以上代码是我以前做项目的时候写的一段记录错误日志的方法,并写了详细的注释,方便大家理解。

 

 

----------------------Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net/heima

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值