使用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>

===========================================================================

net4log 日志管理的更多相关文章

  1. 第13章 Linux日志管理

    1. 日志管理 (1)简介 在CentOS 6.x中日志服务己经由rsyslogd取代了原先的syslogd服务.rsyslogd日志服务更加先进,功能更多.但是不论该服务的使用,还是日志文件的格式其 ...

  2. ABP(现代ASP.NET样板开发框架)系列之8、ABP日志管理

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之8.ABP日志管理 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)” ...

  3. 【Java EE 学习 76 下】【数据采集系统第八天】【通过AOP实现日志管理】【日志管理功能分析和初步实现】

    一.日志管理相关分析 1.日志管理是一种典型的系统级别的应用,非常适合使用spring AOP实现. 2.使用日志管理的目的:对系统修改的动作进行记录,比如对权限.角色.用户的写操作.修改操作.删除操 ...

  4. ElasticSearch+NLog+Elmah实现Asp.Net分布式日志管理

    本文将介绍使用NLOG.Elmah结合ElasticSearch实现分布式日志管理. 一.ElasticSearch简介 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布 ...

  5. Apache 日志管理,获取客户端端口号

    日志管理分类 日志文件是用户管理和监控 Apache 安全的非常好的第一手资料,它清晰地记录了客户端访问 Apache 服务器资源的每一条记录,以及在访问中出现的错误信息,可以这样说,Apache 可 ...

  6. linux 学习 14 日志管理

    第十四讲 日志管理 14.1 日志管理-简介 .日志服务 在CentOS .x中日志服务已经由rsyslogd取代了原先的syslogd服务.rsyslogd日志服务更加先进,功能更多.但是不论该服 ...

  7. SQL Server中的事务日志管理(7/9):处理日志过度增长

    当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会 ...

  8. SQL Server中的事务日志管理(9/9):监控事务日志

    当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会 ...

  9. 基于吉日嘎底层架构的Web端权限管理操作演示-日志管理

    权限管理要实现的效果是对“ 谁”可以访问“什么内容”,可以进行“哪些操作” 一系列权限的精细化控制.衡量一个软件好坏的重要标准是:它的权限体系是否足够细致.是否可以立体勾勒出信息对象的访问控制.前面4 ...

随机推荐

  1. JSON笔记整理

    JSON简介:     JSON: JavaScript Object Notation(JavaScript 对象表示法) JSON 是存储和交换文本信息的语法.类似 XML. JSON 比 XML ...

  2. Spring Boot Actuator 使用

    转载于:https://www.jianshu.com/p/af9738634a21 Spring Boot 的 Actuator 提供了很多生产级的特性,比如监控和度量Spring Boot 应用程 ...

  3. MFS故障测试及维护总结

    一.测试环境说明: 10.2.2.230 mfsmaster     VIP:10.2.2.130 10.2.2.231 mfsbackup 10.2.2.253 mfsdata01 10.2.2.2 ...

  4. delegate的Invoke和BeginInvoke方法

    C#中的控件和delegate委托方法都有Invoke和BeginInvoke方法,控件的这两个方法网上讲得很多, 这里就不多说了,下面讲一下delegate的Invoke和BeginInvoke方法 ...

  5. 深度学习框架caffe/CNTK/Tensorflow/Theano/Torch的对比

    在单GPU下,所有这些工具集都调用cuDNN,因此只要外层的计算或者内存分配差异不大其性能表现都差不多. Caffe: 1)主流工业级深度学习工具,具有出色的卷积神经网络实现.在计算机视觉领域Caff ...

  6. 机器学习&深度学习之路

    计划最近好好按步骤按阶段系统性的学习下机器学习和深度学习,希望能坚持下去. 2019-01-05 基于TensorFlow的深度学习系列教程 2--常量Constant 2019-01-03 深度学习 ...

  7. Android 网络交互之下载断点续传

    一.概述 1.概念 断点续传主要用于下载,本文也主要讲述下载时的断点续传的逻辑思路.顾名思义,断点续传就是下载从中断的地方继续下载,一般是因为暂停或者网络故障导致的下载中断,当恢复下载的时候可以从已经 ...

  8. Java学习笔记44(多线程一:Thread类)

    多线程的概念:略 多线程的目的:提高效率 主线程: package demo; //主线程 public class Demo { public static void main(String[] a ...

  9. MySQL-Cluster 和主从(Master,Slave)搭建总结

    双主互备,主从 什么是双主 MultiSource 多源复制 原理及流程图 主要步骤 1,在 Master Server 上开启 bin log 日志 和 设置 server-id  :(在my.cn ...

  10. 简单登录注册实现(Java面向对象复习)

    简单登录注册的实现(面向对象的复习) 需求: 设计用户类,包含用户名和密码两个属性 设计LoginDemo类设计用户登录方法 用户有三次登录机会,如果连续三次登录失败则退出程序 功能实现页面:     ...