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

第一步 编写配置文件

文件名称为 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);
       }    } 显示效果如下:

转载于:https://www.cnblogs.com/fogwang/archive/2011/10/21/2666611.html

log4net 在asp.net WEB应用程序中的配置相关推荐

  1. power bi报表服务器_如何将Power BI Report Server报表嵌入ASP.Net Web应用程序

    power bi报表服务器 Every once in a while, teams from different functional areas of the business (i.e. bus ...

  2. vs2005新建项目中没有ASP.NET WEB应用程序

    今天正准备使用vs 2005,发现根本打不开老师发过来的源代码Portal_Article.csproj文件,上网查了一下,好多人都说是是因为没有给vs 2005打补丁.我的新建项目里根本没有ASP. ...

  3. oracle web API,在Web API程序中使用Swagger做接口文档

    #### 创建Web API程序 在VS2019中创建一个ASP.NET Web应用程序,选择Web API来创建RESTful的HTTP服务项目,构选MVC和Web API核心引用. #### 安装 ...

  4. Web应用程序中(VS2005+SP1)添加App_Code(转)

    Web应用程序中(VS2005+SP1)添加App_Code 在Web应用程序中不能通过右键项目-〉"添加"-〉"添加ASP.NET文件夹"方式添加 .因为We ...

  5. ASP.NET Web 页面生命中的一天

    ASP.NET Web 页面生命中的一天  Dino Esposito Wintellect 2003 年 8 月 适用于: Microsoft® ASP.NET 摘要:了解为 ASP.NET Web ...

  6. 新建网站与新建Asp.Net+Web+应用程序的区别

    VS2005 VS2008新建网站--asp.net网站和新建项目里ASP.NET Web应用程序区别 WebApplication编程模型的优点: ●网站编译速度快,使用了增量编译模式,仅仅只有文件 ...

  7. SharePoint 2010无法使用外部asp.net web应用程序调试的解决办法

    最近很朋友都在问这个问题. 通过外部asp.net web 应用程序测试SharePoint 2010 的API比较便捷和快速,相信很多人都碰到这个问题.运行环境是Windows Server 200 ...

  8. 将终结点图添加到你的ASP.NET Core应用程序中

    在本文中,我将展示如何使用DfaGraphWriter服务在ASP.NET Core 3.0应用程序中可视化你的终结点路由.上面文章我向您演示了如何生成一个有向图(如我上篇文章[译]使用DOT语言和G ...

  9. DotNetCore Web应用程序中的Session管理

    原文来自互联网,由长沙DotNET技术社区编译.如译文侵犯您的署名权或版权,请联系小编,小编将在24小时内删除.限于译者的能力有限,个别语句翻译略显生硬,还请见谅. 作者简介:Jon(Jonathan ...

最新文章

  1. 有关军事人机混合智能的再再思考
  2. bzoj 4237 稻草人
  3. hihoCoder1040 矩形判断
  4. 如何用python做词云图_科学网—如何用Python做词云?(基础篇视频教程) - 王树义的博文...
  5. 使用多线程一定提高效率吗?
  6. Opportunity的chance of success determination逻辑
  7. Pyalgotrade量化交易回测框架
  8. Scrapy周期性爬取(解决Unknown command: crawl报错)
  9. kafka 消费者API操作入门
  10. 为什么物理隔离的网络,也会中毒?怎么进行防护?
  11. TensorFlow学习笔记(3)——TensorFlow实现Word2Vec
  12. wap网站源码 php,DIYWAP免费PHP手机网站管理系统 v6.3
  13. QA与SQA到底有什么区别和联系?他们的职责和工作内容是什么?QC,QM又是什么?
  14. Java - 使用Cipher类实现加密(RSA)
  15. c语言rst关系,为什么服务器突然回复RST——小心网络中的安全设备
  16. iOS闪退的原因和方案总结
  17. linux下创建php文档,linux新建文件有哪些方法
  18. Leetcode——537. Complex Number Multiplication
  19. matlab的NNF算法,NNF是什么意思
  20. 温度报警课程设计报告

热门文章

  1. Py修行路 python基础 (二十)模块 time模块,random模块,hashlib模块,OS及sys模块...
  2. Qt 【遍历文件夹文件,为listwidgetItem设置图标】
  3. JAVA实现Excel的读写--poi
  4. GDB and core
  5. Arduino 各种模块篇 步进电机 step motor( 不用库,不用shield, 纯)
  6. Sharepoint学习笔记---SPList--创建一个带有Lookup字段的List
  7. 十条技巧 更聪明地使用Google搜索
  8. c++中堆、栈内存分配概念示例讲解
  9. c#多线程同步之EventWaitHandle使用
  10. 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include quot;StdAfx.hquot;”?