在项目中使用log4net记录日志

一、准备工作

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

二、开工-- 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&quot;.txt&quot;" />
      <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(“这是异常信息啊"));  
              
        }
 

七、最终效果

 

image
posted on 2012-03-22 11:28  Frank.Fan  阅读(1015)  评论(0编辑  收藏  举报