使用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. JavaScript:event loop详解

    之前已经有两篇随笔提到了event loop,一篇是事件机制,一篇是tasks和microtasks,但是里面的event loop都是文字描述,很难说细,逻辑也只是简单的提了一遍.其实之前也是通过阮 ...

  2. 【慕课网实战】Spark Streaming实时流处理项目实战笔记十五之铭文升级版

    铭文一级:[木有笔记] 铭文二级: 第12章 Spark Streaming项目实战 行为日志分析: 1.访问量的统计 2.网站黏性 3.推荐 Python实时产生数据 访问URL->IP信息- ...

  3. Django——用户认证和判断用户是否登录

    用户认证 必须通过认证之后才能login(request,user)这样才能保存会话到request中,注销后会话结束 注意 自定义的用户登陆时只不止需要验证用户名和密码的需要写认证,就例如在线教育平 ...

  4. WPF 显示 mp3 专辑图片

    mp3 专辑图片是属于 mp3 的 tag 的一部分,安装 taglib# 的 nuget 安装包到项目.这里使用 TagLib.Portable https://www.nuget.org/pack ...

  5. CentOS添加明细路由

    网络架构图   根据最近为客户设计的网络架构,简单的梳理一个网路架构图,当然实际上的网络架构要比这个架构图复杂的多,咱们这边只是用这个图作为一个简单的示例. 拓扑分析   我们要实现专线两端不同网段的 ...

  6. AJPFX:什么是外汇交易

    外汇交易是对货币对的一种买卖,是以一个国家货币与另外一个国家货币进行交换,即您在买入一国货币的同时,您也卖出了另一国的货币.所以在外汇市场上,人们的交易对象就是“货币对“,比如欧元/美元,美元/日元, ...

  7. 简单的异步函数async/await例子

    function resolveAfter2Seconds(x){ return new Promise(resolve => { setTimeout(() => { resolve(x ...

  8. MongoDB 用法入门(windows)①

    概述 大家对数据库肯定不陌生,肯定也有很多人用过MySQL,但是在用MySQL的时候各种建表,写表之间的关联让人非常头疼. MongoDB也是一种数据库,但是它不是用表,而是用集合来装数据的,我对这种 ...

  9. 程序性能调优工具之gprob

    1 简介改进应用程序的性能是一项非常耗时耗力的工作,但是究竟程序中是哪些函数消耗掉了大部分执行时间,这通常都不是非常明显的.GNU 编译器工具包所提供了一种剖析工具 GNU profiler(gpro ...

  10. 爬虫--反爬--css反爬---大众点评爬虫

    大众点评爬虫分析,,大众点评 的爬虫价格利用css的矢量图偏移,进行加密 只要拦截了css 解析以后再写即可 # -*- coding: utf- -*- """ Cre ...