您的位置:首页 > 其它

在项目中使用log4net记录日志

2012-03-22 11:28 483 查看

一、准备工作

log4net源码一份,或者生成的log4net.dll文件一份
数据库中新建一张表,就叫LogCenter吧。
配置文件一份。
记录日志的方法一份。

二、开工-- log4net.dll

log4net官方网站:http://logging.apache.org/log4net/

编译好的 log4net.dll 文件,猛击这里下载

将log4net.dll添加引用到项目中。

三、建表

--数据库创建表

CREATETABLE[dbo].[LogCenter](

[Id][int] primary key IDENTITY (1, 1)NOT NULL,

[Date][datetime]NOTNULL,

[Thread][varchar](255)NOT NULL,

[Level][varchar](50)NOT NULL,

[Logger][varchar](255)NOT NULL,

[Message][varchar](4000)NOT NULL,

[Exception][varchar](2000)NULL

)

四、添加配置文件

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<!-- 这项配置必须放在configuration下面 -->
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
</configSections>

<!-- log4net配置节点  -->
<log4net>
<logger name="loginfo">
<level value="INFO" />
<appender-ref ref="AdoNetAppender_SqlServer" />
<appender-ref ref="InfoAppender" />
</logger>
<!--<root>
<level value="ALL"/>
<appender-ref ref="AdoNetAppender_SqlServer" />
<appender-ref ref="InfoAppender" />
</root>-->
<appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="Log\\INFO\\" />
<param name="AppendToFile" value="true" />
<param name="MaxFileSize" value="10240" />
<param name="MaxSizeRollBackups" value="100" />
<param name="StaticLogFileName" value="false" />
<param name="DatePattern" value="yyyyMMdd".txt"" />
<param name="RollingStyle" value="Date" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="日志时间:%d Message: %m Exception: %exception %newline" />
</layout>
</appender>
<appender name="AdoNetAppender_SqlServer" type="log4net.Appender.AdoNetAppender">
<!-- BufferSize 为缓冲区大小,只有日志记录超5 条才会一块写入到数据库 -->
<bufferSize value="0" />
<!--2.0这是对应sql2008 如是2000或2005另外配置-->
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral,PublicKeyToken=b77a5c561934e089" />

<!-- 连接数据库字符串 ADO.Net类型的连接 -->
<connectionString value="Data Source=SHOPEX-SH-A0449\FANYONG;Initial Catalog=OnlineShop;User ID=sa;Password=sa;" />

<!-- 插入到表Log -->
<commandText value="INSERT INTO LogCenter ([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.PatternLayout">
<conversionPattern value="%date{yyyy'-'MM'-'dd HH':'mm':'ss'.'fff}" />
</layout>
<!-- <layout type="log4net.Layout.RawTimeStampLayout"/>-->
</parameter>
<parameter>
<parameterName value="@thread" />
<dbType value="String" />
<size value="255" />
<!-- LogComponent 是类所在的命名空间,MyLayout 是自定义属性所在的类,这是我们自己要写的部分,将在下面介绍。 -->
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%thread" />
</layout>
</parameter>
<parameter>
<parameterName value="@log_level" />
<dbType value="String" />
<size value="50" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%level" />
</layout>
</parameter>
<parameter>
<parameterName value="@logger" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%logger" />
</layout>
</parameter>
<parameter>
<parameterName value="@message" />
<dbType value="String" />
<size value="4000" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message" />
</layout>
</parameter>
<parameter>
<parameterName value="@exception" />
<dbType value="String" />
<size value="2000" />
<layout type="log4net.Layout.ExceptionLayout" />
</parameter>
</appender>

</log4net>
</configuration>


五、记录日志的实现代码

Implementation:

using System;

namespace Log4netTet

{

    /// <summary>

    /// 日志操作类

    /// </summary>

    public class LogWrite

    {

        private LogWrite()

        {

            // 构造函数设置配置文件

            SetConfig();

        }

        // 创建一个log4net对象

        //

        private static readonly log4net.ILog logInfo = log4net.LogManager.GetLogger("loginfo");

        private static bool IsLoadConfig = false;

        // 设置配置文件

        //

        private static void SetConfig()

        {

            log4net.Config.XmlConfigurator.Configure();

        }

        /// <summary>

        /// 记录异常信息

        /// </summary>

        /// <param name="info">错误提示信息</param>

        public static void WriteLog(string info)

        {

            if (!IsLoadConfig)

            {

                SetConfig();

                IsLoadConfig = true;

            }

            if (logInfo.IsInfoEnabled)

            {

                logInfo.Info(info);

            }

        }

        public static void WriteLog(string info, Exception ex)

        {

            if (!IsLoadConfig)

            {

                SetConfig();

                IsLoadConfig = true;

            }

            if (logInfo.IsErrorEnabled)

            {

                logInfo.Error(info, ex);

            }

        }

    }

}

六、测试代码

因为实现代码LogWrite类中是静态方法,所以调用的时候不用实例化,简单调用即可。

 

protected void btnLog4net_Click(object sender, EventArgs e)
{
//普通日志消息


Log4netTest.LogWrite.WriteLog(“测试消息");


//异常信息


Log4netTest.LogWrite.WriteLog(“报异常了", new Exception(“这是异常信息啊"));

              

}


 


七、最终效果

 



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: