使用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. Linux 第十天

    十三.权限管理 1.ACL权限开启 1)dumpe2fs -h /dev/sda3查看分区ACL权限是否开启 -h:仅显示超级块中信息,而不显示磁盘块组的详细信息 2)mount -o remount ...

  2. Hibernate配置文件的书写

    Hibernate主要配置文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibern ...

  3. Swagger相关配置记录

    1.SwaggerConfig文件配置 public class SwaggerConfig { protected static string GetXmlCommentsPath() { retu ...

  4. EF db first 获取表名称

    一直以来,使用DB FIRST的方式,想得到表名,最后一直不得其法.直到昨天晚上,反编译自己的程序集的时候,突然发现EF表结构和数据实体类的映射关系存在什么地方.然后就有了这篇文章. 咱们一步步来. ...

  5. kaldi实例脚本运行

    Getting started, and prerequisites. rm/s5/run.sh Data preparation 如果有GridEngine, train_cmd="que ...

  6. 【SP1811】 LCS - Longest Common Substring(SAM)

    传送门 洛谷 Solution 考虑他要求的是最长公共子串对吧,那么我们对于一个串建后缀自动机,另一个串在后缀自动机上面跑就是了. 复杂度\(O(n+m)\)的,很棒! 代码实现 代码戳这里

  7. Vue 父组件ajax异步更新数据,子组件props获取不到

    转载 https://blog.csdn.net/d295968572/article/details/80810349 当父组件 axjos 获取数据,子组件使用 props 接收数据时,执行 mo ...

  8. Python 基础:分分钟入门

    Python和Pythonic Python是一门计算机语言(这不是废话么),简单易学,上手容易,深入有一定困难.为了逼格,还是给你们堆一些名词吧:动态语言.解释型.网络爬虫.数据处理.机器学习.We ...

  9. [译]ElasticSearch vs. Solr

    在Gen2产品的早期阶段, 我们事实上是失败的, 这促使我们重新审视我们现有的技术栈. 我们仔细分析系统中的每个独立的组件,并记录下来, 当然其中也包括构成我们核心功能的搜索引擎技术. 在我们的通用日 ...

  10. Ubuntu下几个命令行方式使用的图片浏览工具

    想找几个Ubuntu下可以以命令行方式使用的图片浏览工具. Google了一些资料,找到下面几个web: 1.pho:轻巧的命令行图片查看器 其中介绍了工具pho,其功能特点,见下面的转帖内容: ph ...