使用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. mysql连续聚合

    连续聚合是按时间顺序对有序数据进行聚合的操作. 在下面的救示例中将使用EmpOrders表,该表用于存放每位员工每月发生的订购数量. 运行如下 代码创建EmpOrders表并填充示例数据. CREAT ...

  2. Perl数据序列化和持久化(入门):Storable模块

    Perl提供了一个Storable模块,用来对数据结构进行序列化(serialization,Perl中称为冻结),也就是将数据结构保存为二进制数据. 序列化后的数据可以写入文件实现持久化,可以将持久 ...

  3. Spring DAO模块

    Spring的DAO模块提供了对JDBC.Hibernate.Mybatis等DAO层支持,本节介绍DAO模块对JDBC的支持.DAO模块依赖ommons-dbcp.jar.commons-pool. ...

  4. Apollo 8 — ConfigService 异步轮询接口的实现

    源码 Apollo 长轮询的实现,是通过客户端轮询 /notifications/v2 接口实现的.具体代码在 com.ctrip.framework.apollo.configservice.con ...

  5. ubuntu 16.04服务器 搭建php LAMP环境

    1.安装Apache 下载目录: sudo apt update 安装程序: sudo apt install apache2 检查是否安装成功: sudo systemctl status apac ...

  6. 【Java每日一题】20170228

    20170227问题解析请点击今日问题下方的“[Java每日一题]20170228”查看(问题解析在公众号首发,公众号ID:weknow619) package Feb2017; import jav ...

  7. 挑战常规--搭建gradle、maven私人仓库很简单

    常规 百度搜索“搭建maven私有仓库”,搜索到的结果几乎都是使用nexus 不一样的简单 如果了解maven上传原理,完全没必要搞得那么复杂庞大,区区不足百行代码就可以实现一个私有仓库. maven ...

  8. mybatis插件机制

    目录 mybatis插件机制 主要 类/接口 和 方法 mybatis插件机制实现 mybatis插件机制 mybatis的插件机制使用动态代理实现,不了解的朋友请先了解代理模式和动态代理:插件本质是 ...

  9. 7个拒绝使用TypeScript的借口

    译者按: TypeScript 学习成本不高,项目切换成本不低,不过还是值得试一试的! 原文:7 bad excuses for not using TypeScript 译者: Fundebug 为 ...

  10. H5_canvas与svg

    Canvas 什么是canvas: HTML5 的 canvas 元素是使用 JavaScript 在网页上绘制图像,canvas 元素本身是没有绘图能力的,所有的绘制工作必须在 JavaScript ...