log4net 在asp.net WEB应用程序中的配置

我是一个三层架构的应用程序,将日志记录放在了业务层,并写入了数据库,整个使用操作步骤为以下步骤。

第一步 编写配置文件

文件名称为 log4net.config 内容如下

<?xml version="1.0" encoding="utf-8"?>
<log4net>
  <appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
    <bufferSize value="1" />
    <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    <connectionString value="server=fogwang;database=zzrd;uid=sa;pwd=sa;pooling=false;" />
    <commandText value="INSERT INTO LogInfo ([dtDate],[sThread],[sLevel],[sLogger], [ClientIP], [PageUrl],[sMessage],[sException],OpreateType,UserAccount,UIOrSysAdmin,LogType) VALUES (@log_date, @thread, @log_level, @logger, @ClientIP, @PageUrl,@message, @exception,@OpreateType,@UserAccount,@UIOrSysAdmin,@LogType)" />
    <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="@ClientIP" />
      <dbType value="String" />
      <size value="50"></size>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%properties{ClientIP}" />
      </layout>
    </parameter>
    <parameter>
      <parameterName value="@PageUrl" />
      <dbType value="String" />
      <size value="200"></size>
      <layout type="log4net.Ext.Web.ReflectionLayout">
        <conversionPattern value="%properties{RequestUrl}" />
      </layout>
    </parameter>
    <parameter>
      <parameterName value="@OpreateType" />
      <dbType value="String" />
      <size value="50"></size>
      <layout type="log4net.Ext.Web.ReflectionLayout">
        <conversionPattern value="%properties{OpreateType}" />
      </layout>
    </parameter>
    <parameter>
      <parameterName value="@UserAccount" />
      <dbType value="String" />
      <size value="50"></size>
      <layout type="log4net.Ext.Web.ReflectionLayout">
        <conversionPattern value="%properties{UserAccount}" />
      </layout>
    </parameter>
    <parameter>
      <parameterName value="@UIOrSysAdmin" />
      <dbType value="String" />
      <size value="10"></size>
      <layout type="log4net.Ext.Web.ReflectionLayout">
        <conversionPattern value="%properties{UIOrSysAdmin}" />
      </layout>
    </parameter>
    <parameter>
      <parameterName value="@LogType" />
      <dbType value="String" />
      <size value="50"></size>
      <layout type="log4net.Ext.Web.ReflectionLayout">
        <conversionPattern value="%properties{LogType}" />
      </layout>
    </parameter>
    <parameter>
      <parameterName value="@message" />
      <dbType value="String" />
      <size value="3500" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%m" />
      </layout>
    </parameter>
    <parameter>
      <parameterName value="@exception" />
      <dbType value="String" />
      <size value="3500" />
      <layout type="log4net.Layout.ExceptionLayout" />
    </parameter>
  </appender>
  <!-- setup the root category, add the appenders and set the default level -->
  <root>
    <level value="WARN"/>
    <level value="INFO"/>
    <level value="DEBUG"/>
    <level value="FINE"/>
    <appender-ref ref="ADONetAppender" />
  </root>
  <logger name="StellaLogger">
    <level value="ALL"/>
    <appender-ref ref="AdoNetAppender" />
  </logger>
</log4net>

附:配置文件解释:

log4net.Layout.PatternLayout中的转换模式(ConversionPattern)

%m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息

%n(new line):换行

%d(datetime):输出当前语句运行的时刻

%r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数

%t(thread id):当前语句所在的线程ID

%p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等

%c(class):当前日志对象的名称,例如:

模式字符串为:%-10c -%m%n

代码为:

ILog log=LogManager.GetLogger(“Exam.Log”);

log.Debug(“Hello”);

则输出为下面的形式:

Exam.Log - Hello

%L:输出语句所在的行号

%F:输出语句所在的文件名

%-数字:表示该项的最小长度,如果不够,则用空格填充

例如,转换模式为%r [%t]%-5p %c - %m%n 的 PatternLayout 将生成类似于以下内容的输出:

176 [main] INFO org.foo.Bar - Located nearest gas station.

第二步骤在业务层的属性文件关联配置文件:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log4net/log4net.config", Watch = true)]

其中ConfigFile的属性为放在显示层中配置文件的位置

第三步在业务层中的使用:

#region 删除记录
      /// <summary>
      /// 删除记录
      /// </summary>
      /// <param name="id">ID(可多个)</param>
      /// <returns></returns>
      public bool Delete ( string id )
      {
          DataTable dt= dal.getNewsList("id,title,typename"," in in("+id+")");
          log4net.Ext.Web.IWebLog log = log4net.Ext.Web.WebLogManager.GetLogger(typeof(NewsBLL));


          log.Info("删除新闻标题:" + dt.Rows[0]["title"] + "新闻编号:" + dt.Rows[0]["id"] + "类别:" + dt.Rows[0]["typename"], WebUtility.Comm.GetAdminOrUIUserCook()[0], WebUtility.Comm.GetIP(), WebUtility.Comm.GetUrl(), log4net.Ext.Web.WebLogImpl.OpreateType.删除, log4net.Ext.Web.WebLogImpl.UIOrSys.后台, log4net.Ext.Web.WebLogImpl.LogType.信息操作日志);
          return dal.Delete ( id );
      }
      #endregion

第四步:读取操作日志:

数据层代码:

public class LogOpreateDAL
   {
       public int Delete(string id)
       {
           return SqlHelper.ExecuteNonQuery(DBConn.GetSqlConn(), CommandType.Text, "Delete LogInfo Where LogID In(" + id + ")");
       }

       public DataSet GetListByPage(string expcon, int pagesize, int CurrentPage, out int PageCount, out int RecordCount)
       {
           PagerDAL dal = new PagerDAL();
           return dal.GetPagerList(DBConn.GetSqlConn(), "LogInfo", "LogId", 1, "*", pagesize, CurrentPage, expcon, out PageCount, out RecordCount);
       }

   }

显示效果如下:

TM截图未命名

原文地址:https://www.cnblogs.com/fogwang/p/2666611.html