使用log4net可以很方便地为应用添加日志功能。应用Log4net,开发者可以很精确地控制日志信息的输出,减少了多余信息,提高了日志记录性能。同时,通过外部配置文件,用户可以不用重新编译程序就能改变应用的日志行为,使得用户可以根据情况灵活地选择要记录的信息。

那么我们如何在Web项目中使用Log4Net呢?

一、基本配置

 

1、下载Log4Net,地址如下:http://logging.apache.org/log4net/download_log4net.cgi,如下图所示:

2、下载到本地后,进行解压,,并找到对应版本的.NET Framework版本,如下图所示:

3、在项目中添加Log4Net.DLL的引用,如下图所示:

4、在Web项目根目录下创建log4net.config配置文件,如下图所示:

配置文件log4new.config XML代码如下:

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <log4net debug="false">
  3. <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
  4. <param name="File" value="Log/AT.log"/>
  5. <param name="datePattern" value="YY-MM-dd HH:mm"/>
  6. <param name="AppendToFile" value="true"/>
  7. <layout type="log4net.Layout.PatternLayout">
  8. <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
  9. </layout>
  10. </appender>
  11. <appender name="HttpTraceAppender" type="log4net.Appender.ASPNetTraceAppender">
  12. <layout type="log4net.Layout.PatternLayout">
  13. <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
  14. </layout>
  15. </appender>
  16. <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
  17. <layout type="log4net.Layout.PatternLayout">
  18. <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
  19. </layout>
  20. </appender>
  21. <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
  22. <file value="log\AT"/>
  23. <appendToFile value="true"/>
  24. <rollingStyle value="Date"/>
  25. <datePattern value="_yyyyMMdd'.log'"/>
  26. <staticLogFileName value="false"/>
  27. <layout type="log4net.Layout.PatternLayout">
  28. <conversionPattern value="%d [%t] %-5p %c - %m%n"/>
  29. </layout>
  30. </appender>
  31. <root>
  32. <level value="INFO"/>
  33. <!--<level value="ERROR" />-->
  34. <appender-ref ref="RollingLogFileAppender"/>
  35. </root>
  36. </log4net>

5、项目中添加一个LogHelper.cs操作类,这样可以之后的其他页面进行调用,如下图所示:

LogHelper.cs类代码如下:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. [assembly: log4net.Config.XmlConfigurator(Watch = true)]
  6. namespace APESM_GGJ.CommonClass
  7. {
  8. public class LogHelper
  9. {
  10. /// <summary>
  11. /// 输出日志到Log4Net
  12. /// </summary>
  13. /// <param name="t"></param>
  14. /// <param name="ex"></param>
  15. #region static void WriteLog(Type t, Exception ex)
  16. public static void WriteLog(Type t, Exception ex)
  17. {
  18. log4net.ILog log = log4net.LogManager.GetLogger(t);
  19. log.Error("Error", ex);
  20. }
  21. #endregion
  22. /// <summary>
  23. /// 输出日志到Log4Net
  24. /// </summary>
  25. /// <param name="t"></param>
  26. /// <param name="msg"></param>
  27. #region static void WriteLog(Type t, string msg)
  28. public static void WriteLog(Type t, string msg)
  29. {
  30. log4net.ILog log = log4net.LogManager.GetLogger(t);
  31. log.Error(msg);
  32. }
  33. #endregion
  34. }
  35. }

6、在项目中添加一个全局应用程序类Global.asax,如下图所示:

方法中添加如下代码:

  1. protected void Application_Start(object sender, EventArgs e)
  2. {
  3. //应用程序启动时,自动加载配置log4Net
  4. XmlConfigurator.Configure();
  5. }

7、打开Web.config文件,添加如下配置信息,如下图所示:

配置文件代码如下:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!--
  3. 有关如何配置 ASP.NET 应用程序的详细信息,请访问
  4. http://go.microsoft.com/fwlink/?LinkId=169433
  5. -->
  6. <configuration>
  7. <configSections>
  8. <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  9. </configSections>
  10. <log4net configSource="log4net.config"/>
  11. <system.web>
  12. <httpModules>
  13. <!--重写IHttpModule类,需要配置的信息-->
  14. <!--<add name="FilterModule" type="APESM_GGJ.FilterModule,APESM_GGJ" />-->
  15. </httpModules>
  16. <compilation debug="true" targetFramework="4.0" />
  17. </system.web>
  18. </configuration>

8、在页面中调用,进行日志写入,如下图所示:

页面调用代码:

  1. protected void Page_Load(object sender, EventArgs e)
  2. {
  3. if (!IsPostBack)
  4. {
  5. LogHelper.WriteLog(typeof(Login), "测试在Web项目中使用Log4Net日志!");
  6. }
  7. }

9、查看项目根目录下的Log文件夹,可以看见我们写入的日志log文件,如下图所示:

至此在Web项目中使用Log4Net进行日志记录的功能就已经实现了。

---------------------------------------------------------------------------------------------------------------------

二、扩展

 

上面实现的是将日志写入到文件中,那么如果想写入到数据库中,该如何操作,这里以SQL Server为例,创建一个日志表,然后修改log4net.config文件,如下代码:

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <log4net debug="false">
  3. <appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
  4. <bufferSize value="10" />
  5. <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  6. <connectionString value="DATABASE=CSDN;SERVER=.;UID=sa;PWD=111111;Connect Timeout=15;" />
  7. <commandText value="INSERT INTO ErrorLog ([dtDate],[sThread],[sLevel],[sLogger],[sMessage],[sException]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
  8. <parameter>
  9. <parameterName value="@log_date" />
  10. <dbType value="DateTime" />
  11. <layout type="log4net.Layout.RawTimeStampLayout" />
  12. </parameter>
  13. <parameter>
  14. <parameterName value="@thread" />
  15. <dbType value="String" />
  16. <size value="100" />
  17. <layout type="log4net.Layout.PatternLayout">
  18. <conversionPattern value="%t" />
  19. </layout>
  20. </parameter>
  21. <parameter>
  22. <parameterName value="@log_level" />
  23. <dbType value="String" />
  24. <size value="200" />
  25. <layout type="log4net.Layout.PatternLayout">
  26. <conversionPattern value="%p" />
  27. </layout>
  28. </parameter>
  29. <parameter>
  30. <parameterName value="@logger" />
  31. <dbType value="String" />
  32. <size value="500" />
  33. <layout type="log4net.Layout.PatternLayout">
  34. <conversionPattern value="%logger" />
  35. </layout>
  36. </parameter>
  37. <parameter>
  38. <parameterName value="@message" />
  39. <dbType value="String" />
  40. <size value="3000" />
  41. <layout type="log4net.Layout.PatternLayout">
  42. <conversionPattern value="%m" />
  43. </layout>
  44. </parameter>
  45. <parameter>
  46. <parameterName value="@exception" />
  47. <dbType value="String" />
  48. <size value="4000" />
  49. <layout type="log4net.Layout.ExceptionLayout" />
  50. </parameter>
  51. </appender>
  52. <!-- setup the root category, add the appenders and set the default level -->
  53. <root>
  54. <level value="WARN"/>
  55. <level value="INFO"/>
  56. <level value="DEBUG"/>
  57. <level value="FINE"/>
  58. <appender-ref ref="ADONetAppender" />
  59. </root>
  60. <!-- specify the level for some specific categories -->
  61. <logger name="iNotes">
  62. <level value="WARN"/>
  63. <level value="INFO"/>
  64. <level value="DEBUG"/>
  65. <level value="FINE"/>
  66. <appender-ref ref="ADONetAppender"/>
  67. </logger>
  68. <logger name="StellaLogger">
  69. <level value="ALL"/>
  70. <appender-ref ref="AdoNetAppender" />
  71. </logger>
  72. </log4net>

注意<bufferSize value="10" /> ,需要注意的一个参数 bufferSize=10 表示是记录10 条到缓冲区,满10条后再写入SQL server;

测试时将其修改为1

生产环境建议100

上面配置节中数据库名,用户名和密码,根据实际情况进行修改。

数据库表ErrorLog创建语句为:

  1. CREATE TABLE ErrorLog(
  2. nId bigint IDENTITY(1,1) NOT NULL,
  3. dtDate datetime NOT NULL,
  4. sThread nvarchar(100) NOT NULL,
  5. sLevel nvarchar(200) NOT NULL,
  6. sLogger nvarchar(500) NOT NULL,
  7. sMessage nvarchar(3000) NOT NULL,
  8. sException nvarchar(4000) NULL
  9. );

如下图所示:

三、整合

想同时保存到日志文件和数据库,log4net.config的文件配置如下XML代码所示:

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <log4net debug="false">
  3. <!-- 将日志信息写入SQL Server数据库 2015-09-29-->
  4. <appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
  5. <bufferSize value="1" />
  6. <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  7. <connectionString value="DATABASE=CSDN;SERVER=.;UID=sa;PWD=111111;Connect Timeout=15;" />
  8. <commandText value="INSERT INTO ErrorLog ([dtDate],[sThread],[sLevel],[sLogger],[sMessage],[sException]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
  9. <parameter>
  10. <parameterName value="@log_date" />
  11. <dbType value="DateTime" />
  12. <layout type="log4net.Layout.RawTimeStampLayout" />
  13. </parameter>
  14. <parameter>
  15. <parameterName value="@thread" />
  16. <dbType value="String" />
  17. <size value="100" />
  18. <layout type="log4net.Layout.PatternLayout">
  19. <conversionPattern value="%t" />
  20. </layout>
  21. </parameter>
  22. <parameter>
  23. <parameterName value="@log_level" />
  24. <dbType value="String" />
  25. <size value="200" />
  26. <layout type="log4net.Layout.PatternLayout">
  27. <conversionPattern value="%p" />
  28. </layout>
  29. </parameter>
  30. <parameter>
  31. <parameterName value="@logger" />
  32. <dbType value="String" />
  33. <size value="500" />
  34. <layout type="log4net.Layout.PatternLayout">
  35. <conversionPattern value="%logger" />
  36. </layout>
  37. </parameter>
  38. <parameter>
  39. <parameterName value="@message" />
  40. <dbType value="String" />
  41. <size value="3000" />
  42. <layout type="log4net.Layout.PatternLayout">
  43. <conversionPattern value="%m" />
  44. </layout>
  45. </parameter>
  46. <parameter>
  47. <parameterName value="@exception" />
  48. <dbType value="String" />
  49. <size value="4000" />
  50. <layout type="log4net.Layout.ExceptionLayout" />
  51. </parameter>
  52. </appender>
  53. <!-- 将日志信息写入到项目日志文件 2015-09-29 -->
  54. <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
  55. <param name="File" value="Log/AT.log"/>
  56. <param name="datePattern" value="YY-MM-dd HH:mm"/>
  57. <param name="AppendToFile" value="true"/>
  58. <layout type="log4net.Layout.PatternLayout">
  59. <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
  60. </layout>
  61. </appender>
  62. <appender name="HttpTraceAppender" type="log4net.Appender.ASPNetTraceAppender">
  63. <layout type="log4net.Layout.PatternLayout">
  64. <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
  65. </layout>
  66. </appender>
  67. <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
  68. <layout type="log4net.Layout.PatternLayout">
  69. <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
  70. </layout>
  71. </appender>
  72. <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
  73. <file value="log\AT"/>
  74. <appendToFile value="true"/>
  75. <rollingStyle value="Date"/>
  76. <datePattern value="_yyyyMMdd'.log'"/>
  77. <staticLogFileName value="false"/>
  78. <layout type="log4net.Layout.PatternLayout">
  79. <conversionPattern value="%d [%t] %-5p %c - %m%n"/>
  80. </layout>
  81. </appender>
  82. <!--设置根目录,添加appenders并设置默认日志等级 -->
  83. <root>
  84. <level value="WARN"/>
  85. <level value="INFO"/>
  86. <level value="DEBUG"/>
  87. <level value="FINE"/>
  88. <appender-ref ref="ADONetAppender" />
  89. <appender-ref ref="RollingLogFileAppender"/>
  90. </root>
  91. <!-- 为特定的目录指定等级 -->
  92. <logger name="iNotes">
  93. <level value="WARN"/>
  94. <level value="INFO"/>
  95. <level value="DEBUG"/>
  96. <level value="FINE"/>
  97. <appender-ref ref="ADONetAppender"/>
  98. <appender-ref ref="RollingLogFileAppender"/>
  99. </logger>
  100. <logger name="StellaLogger">
  101. <level value="ALL"/>
  102. <appender-ref ref="AdoNetAppender" />
  103. <appender-ref ref="RollingLogFileAppender"/>
  104. </logger>
  105. </log4net>

asp.net Web项目中使用Log4Net进行错误日志记录的更多相关文章

  1. Web项目中使用Log4net 案例

    简介: 几乎所有的大型应用都会有自己的用于跟踪调试的API.因为一旦程序被部署以后,就不太可能再利用专门的调试工具了.然而一个管理员可能需要有一套强大的日志系统来诊断和修复配置上的问题. 经验表明,日 ...

  2. web项目中的 log4net的配置

    最近用log4net,网上查了很多资料,照着网上的配置大多都不管用,可能我还是有什么地方配置的不对.看出来的朋友平指出.下面是我自己亲测的,可以用! 1.web项目中的web.config 配置log ...

  3. Web项目中创建简单的错误处理页面

    当应用程序出现错误的时候,如果没有做错误页面处理的话,会直接输出一些敏感的信息出来,有时候甚至会直接将项目所在的物理路径给显示出来,严重缺乏安全性,并且错误种类繁多,页面风格不一,导致用户体验不好,本 ...

  4. 在ASP.NET MVC3项目中,自定义404错误页面

    在Web开发中,用户体验是至关重要的,一个友好的网站自然少不了自定义404错误页面. 让笔者为大家介绍404错误页面在ASP.NET MVC3项目中的配置: 第一步,在项目的Web.config文件中 ...

  5. ASP.NET MVC Web项目中使用Log4Net记录日志,并按照日志类型分文件存储

    1.创建MvcLog4Net项目 2.创建 空的MVC项目 3.项目创建完成的效果 4.选择项目,点击鼠标右键,在弹出菜单中选择“管理解决方案的 NuGet 程序包” 5. 在NuGet浏览界面: 点 ...

  6. ASP.NET MVC4 Web项目中使用Log4Net记录日志到文件和数据库。

    下载与.netframework版本向对应的log4net.dll ,然后添加引用.下载地址:http://logging.apache.org/log4net/download_log4net.cg ...

  7. 【手把手教你Elmah】如何在MVC.NET项目中在线查看【错误日志】

     一.  在NuGet下载Elmah.MVC dll文件!  或者点击下载dll文件,并且引用客户端. 二.配置WebConfig <sectionGroup name="elmah& ...

  8. 使用Log4Net进行错误日志记录

    http://blog.csdn.net/zdw_wym/article/details/48802821

  9. MVC 中使用log4net 打印重复日志解决方法

    最近在项目中引用log4net 来打印日志,会发现在同一时间点 打印重复记录: 详见图

随机推荐

  1. systemctl enable docker.service

    [root@dingyingsi ~]# systemctl start docker.service [root@dingyingsi ~]# systemctl enable docker.ser ...

  2. istio小结

    一.概述 测试环境已经跑了很长时间的istio了,也更新到了最新的istio-1.1.性能相较之前提升很大,官方给出的测试数据说是延迟降低到了8ms,但是实际测试确实访问速度有很大的提升,但是确实还是 ...

  3. python基本操作

    创建列表 sample_list = ['a',1,('a','b')] Python 列表操作 sample_list = ['a','b',0,1,3] 得到列表中的某一个值 value_star ...

  4. Perl的数值和字符串

    数值和字符串 数值 perl中以双精度(浮点数)方式保存和运算数值的方式 就算写的是整数,在内部也会转换成等效的浮点数类型保存. 但在perl内部,有些运算会将浮点数转换成整型进行,而且也有integ ...

  5. Perl模块管理

    Perl模块管理 perl有自带的模块,还有第三方模块.自带的模块是随perl安装而安装好的,第三方模块需要从CPAN(Comprehensive Perl Archive Network)上下载并安 ...

  6. python字符串(string)方法整理

    python中字符串对象提供了很多方法来操作字符串,功能相当丰富. print(dir(str)) [..........'capitalize', 'casefold', 'center', 'co ...

  7. python bytes和bytearray、编码和解码

    str.bytes和bytearray简介 str是字符数据,bytes和bytearray是字节数据.它们都是序列,可以进行迭代遍历.str和bytes是不可变序列,bytearray是可变序列,可 ...

  8. 解读经典《C#高级编程》第七版 Page45-50.核心C#.Chapter2

    前言 本篇讲述枚举和名称空间. 01 枚举 首先需要明确枚举的概念:枚举是用户定义的整数类型.使用枚举的目标是,使用一组容易记忆的名称,来使得代码更容易编写和维护. 我们对比枚举的定义和类的定义,会发 ...

  9. 举例分析 Makefile 中的 patsubst、wildcard、notdir 函数

    函数简介: 1.wildcard : 扩展通配符 2.notdir :去除路径 3.patsubst :替换通配符 实例: 建立一个 test 目录,在测试目录下建立一个名为 sub 的子目录 $ m ...

  10. asp.net 中Repeater和Gridview的区别

             Griview:              优点:1.GridView是从WebControl派生出来的,拥有WebControl样式属性,自身会被解析为table,其中的每一行会被 ...