asp.net Web项目中使用Log4Net进行错误日志记录
使用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代码如下:
- <?xml version="1.0" encoding="utf-8" ?>
- <log4net debug="false">
- <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
- <param name="File" value="Log/AT.log"/>
- <param name="datePattern" value="YY-MM-dd HH:mm"/>
- <param name="AppendToFile" value="true"/>
- <layout type="log4net.Layout.PatternLayout">
- <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
- </layout>
- </appender>
- <appender name="HttpTraceAppender" type="log4net.Appender.ASPNetTraceAppender">
- <layout type="log4net.Layout.PatternLayout">
- <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
- </layout>
- </appender>
- <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
- <layout type="log4net.Layout.PatternLayout">
- <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
- </layout>
- </appender>
- <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
- <file value="log\AT"/>
- <appendToFile value="true"/>
- <rollingStyle value="Date"/>
- <datePattern value="_yyyyMMdd'.log'"/>
- <staticLogFileName value="false"/>
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="%d [%t] %-5p %c - %m%n"/>
- </layout>
- </appender>
- <root>
- <level value="INFO"/>
- <!--<level value="ERROR" />-->
- <appender-ref ref="RollingLogFileAppender"/>
- </root>
- </log4net>
5、项目中添加一个LogHelper.cs操作类,这样可以之后的其他页面进行调用,如下图所示:
LogHelper.cs类代码如下:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- [assembly: log4net.Config.XmlConfigurator(Watch = true)]
- namespace APESM_GGJ.CommonClass
- {
- public class LogHelper
- {
- /// <summary>
- /// 输出日志到Log4Net
- /// </summary>
- /// <param name="t"></param>
- /// <param name="ex"></param>
- #region static void WriteLog(Type t, Exception ex)
- public static void WriteLog(Type t, Exception ex)
- {
- log4net.ILog log = log4net.LogManager.GetLogger(t);
- log.Error("Error", ex);
- }
- #endregion
- /// <summary>
- /// 输出日志到Log4Net
- /// </summary>
- /// <param name="t"></param>
- /// <param name="msg"></param>
- #region static void WriteLog(Type t, string msg)
- public static void WriteLog(Type t, string msg)
- {
- log4net.ILog log = log4net.LogManager.GetLogger(t);
- log.Error(msg);
- }
- #endregion
- }
- }
6、在项目中添加一个全局应用程序类Global.asax,如下图所示:
方法中添加如下代码:
- protected void Application_Start(object sender, EventArgs e)
- {
- //应用程序启动时,自动加载配置log4Net
- XmlConfigurator.Configure();
- }
7、打开Web.config文件,添加如下配置信息,如下图所示:
配置文件代码如下:
- <?xml version="1.0" encoding="utf-8"?>
- <!--
- 有关如何配置 ASP.NET 应用程序的详细信息,请访问
- http://go.microsoft.com/fwlink/?LinkId=169433
- -->
- <configuration>
- <configSections>
- <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
- </configSections>
- <log4net configSource="log4net.config"/>
- <system.web>
- <httpModules>
- <!--重写IHttpModule类,需要配置的信息-->
- <!--<add name="FilterModule" type="APESM_GGJ.FilterModule,APESM_GGJ" />-->
- </httpModules>
- <compilation debug="true" targetFramework="4.0" />
- </system.web>
- </configuration>
8、在页面中调用,进行日志写入,如下图所示:
页面调用代码:
- protected void Page_Load(object sender, EventArgs e)
- {
- if (!IsPostBack)
- {
- LogHelper.WriteLog(typeof(Login), "测试在Web项目中使用Log4Net日志!");
- }
- }
9、查看项目根目录下的Log文件夹,可以看见我们写入的日志log文件,如下图所示:
至此在Web项目中使用Log4Net进行日志记录的功能就已经实现了。
---------------------------------------------------------------------------------------------------------------------
二、扩展
上面实现的是将日志写入到文件中,那么如果想写入到数据库中,该如何操作,这里以SQL Server为例,创建一个日志表,然后修改log4net.config文件,如下代码:
- <?xml version="1.0" encoding="utf-8" ?>
- <log4net debug="false">
- <appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
- <bufferSize value="10" />
- <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
- <connectionString value="DATABASE=CSDN;SERVER=.;UID=sa;PWD=111111;Connect Timeout=15;" />
- <commandText value="INSERT INTO ErrorLog ([dtDate],[sThread],[sLevel],[sLogger],[sMessage],[sException]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
- <parameter>
- <parameterName value="@log_date" />
- <dbType value="DateTime" />
- <layout type="log4net.Layout.RawTimeStampLayout" />
- </parameter>
- <parameter>
- <parameterName value="@thread" />
- <dbType value="String" />
- <size value="100" />
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="%t" />
- </layout>
- </parameter>
- <parameter>
- <parameterName value="@log_level" />
- <dbType value="String" />
- <size value="200" />
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="%p" />
- </layout>
- </parameter>
- <parameter>
- <parameterName value="@logger" />
- <dbType value="String" />
- <size value="500" />
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="%logger" />
- </layout>
- </parameter>
- <parameter>
- <parameterName value="@message" />
- <dbType value="String" />
- <size value="3000" />
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="%m" />
- </layout>
- </parameter>
- <parameter>
- <parameterName value="@exception" />
- <dbType value="String" />
- <size value="4000" />
- <layout type="log4net.Layout.ExceptionLayout" />
- </parameter>
- </appender>
- <!-- setup the root category, add the appenders and set the default level -->
- <root>
- <level value="WARN"/>
- <level value="INFO"/>
- <level value="DEBUG"/>
- <level value="FINE"/>
- <appender-ref ref="ADONetAppender" />
- </root>
- <!-- specify the level for some specific categories -->
- <logger name="iNotes">
- <level value="WARN"/>
- <level value="INFO"/>
- <level value="DEBUG"/>
- <level value="FINE"/>
- <appender-ref ref="ADONetAppender"/>
- </logger>
- <logger name="StellaLogger">
- <level value="ALL"/>
- <appender-ref ref="AdoNetAppender" />
- </logger>
- </log4net>
注意<bufferSize value="10" /> ,需要注意的一个参数 bufferSize=10 表示是记录10 条到缓冲区,满10条后再写入SQL server;
测试时将其修改为1
生产环境建议100
上面配置节中数据库名,用户名和密码,根据实际情况进行修改。
数据库表ErrorLog创建语句为:
- CREATE TABLE ErrorLog(
- nId bigint IDENTITY(1,1) NOT NULL,
- dtDate datetime NOT NULL,
- sThread nvarchar(100) NOT NULL,
- sLevel nvarchar(200) NOT NULL,
- sLogger nvarchar(500) NOT NULL,
- sMessage nvarchar(3000) NOT NULL,
- sException nvarchar(4000) NULL
- );
如下图所示:
三、整合
想同时保存到日志文件和数据库,log4net.config的文件配置如下XML代码所示:
- <?xml version="1.0" encoding="utf-8" ?>
- <log4net debug="false">
- <!-- 将日志信息写入SQL Server数据库 2015-09-29-->
- <appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
- <bufferSize value="1" />
- <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
- <connectionString value="DATABASE=CSDN;SERVER=.;UID=sa;PWD=111111;Connect Timeout=15;" />
- <commandText value="INSERT INTO ErrorLog ([dtDate],[sThread],[sLevel],[sLogger],[sMessage],[sException]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
- <parameter>
- <parameterName value="@log_date" />
- <dbType value="DateTime" />
- <layout type="log4net.Layout.RawTimeStampLayout" />
- </parameter>
- <parameter>
- <parameterName value="@thread" />
- <dbType value="String" />
- <size value="100" />
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="%t" />
- </layout>
- </parameter>
- <parameter>
- <parameterName value="@log_level" />
- <dbType value="String" />
- <size value="200" />
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="%p" />
- </layout>
- </parameter>
- <parameter>
- <parameterName value="@logger" />
- <dbType value="String" />
- <size value="500" />
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="%logger" />
- </layout>
- </parameter>
- <parameter>
- <parameterName value="@message" />
- <dbType value="String" />
- <size value="3000" />
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="%m" />
- </layout>
- </parameter>
- <parameter>
- <parameterName value="@exception" />
- <dbType value="String" />
- <size value="4000" />
- <layout type="log4net.Layout.ExceptionLayout" />
- </parameter>
- </appender>
- <!-- 将日志信息写入到项目日志文件 2015-09-29 -->
- <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
- <param name="File" value="Log/AT.log"/>
- <param name="datePattern" value="YY-MM-dd HH:mm"/>
- <param name="AppendToFile" value="true"/>
- <layout type="log4net.Layout.PatternLayout">
- <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
- </layout>
- </appender>
- <appender name="HttpTraceAppender" type="log4net.Appender.ASPNetTraceAppender">
- <layout type="log4net.Layout.PatternLayout">
- <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
- </layout>
- </appender>
- <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
- <layout type="log4net.Layout.PatternLayout">
- <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
- </layout>
- </appender>
- <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
- <file value="log\AT"/>
- <appendToFile value="true"/>
- <rollingStyle value="Date"/>
- <datePattern value="_yyyyMMdd'.log'"/>
- <staticLogFileName value="false"/>
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="%d [%t] %-5p %c - %m%n"/>
- </layout>
- </appender>
- <!--设置根目录,添加appenders并设置默认日志等级 -->
- <root>
- <level value="WARN"/>
- <level value="INFO"/>
- <level value="DEBUG"/>
- <level value="FINE"/>
- <appender-ref ref="ADONetAppender" />
- <appender-ref ref="RollingLogFileAppender"/>
- </root>
- <!-- 为特定的目录指定等级 -->
- <logger name="iNotes">
- <level value="WARN"/>
- <level value="INFO"/>
- <level value="DEBUG"/>
- <level value="FINE"/>
- <appender-ref ref="ADONetAppender"/>
- <appender-ref ref="RollingLogFileAppender"/>
- </logger>
- <logger name="StellaLogger">
- <level value="ALL"/>
- <appender-ref ref="AdoNetAppender" />
- <appender-ref ref="RollingLogFileAppender"/>
- </logger>
- </log4net>
asp.net Web项目中使用Log4Net进行错误日志记录的更多相关文章
- Web项目中使用Log4net 案例
简介: 几乎所有的大型应用都会有自己的用于跟踪调试的API.因为一旦程序被部署以后,就不太可能再利用专门的调试工具了.然而一个管理员可能需要有一套强大的日志系统来诊断和修复配置上的问题. 经验表明,日 ...
- web项目中的 log4net的配置
最近用log4net,网上查了很多资料,照着网上的配置大多都不管用,可能我还是有什么地方配置的不对.看出来的朋友平指出.下面是我自己亲测的,可以用! 1.web项目中的web.config 配置log ...
- Web项目中创建简单的错误处理页面
当应用程序出现错误的时候,如果没有做错误页面处理的话,会直接输出一些敏感的信息出来,有时候甚至会直接将项目所在的物理路径给显示出来,严重缺乏安全性,并且错误种类繁多,页面风格不一,导致用户体验不好,本 ...
- 在ASP.NET MVC3项目中,自定义404错误页面
在Web开发中,用户体验是至关重要的,一个友好的网站自然少不了自定义404错误页面. 让笔者为大家介绍404错误页面在ASP.NET MVC3项目中的配置: 第一步,在项目的Web.config文件中 ...
- ASP.NET MVC Web项目中使用Log4Net记录日志,并按照日志类型分文件存储
1.创建MvcLog4Net项目 2.创建 空的MVC项目 3.项目创建完成的效果 4.选择项目,点击鼠标右键,在弹出菜单中选择“管理解决方案的 NuGet 程序包” 5. 在NuGet浏览界面: 点 ...
- ASP.NET MVC4 Web项目中使用Log4Net记录日志到文件和数据库。
下载与.netframework版本向对应的log4net.dll ,然后添加引用.下载地址:http://logging.apache.org/log4net/download_log4net.cg ...
- 【手把手教你Elmah】如何在MVC.NET项目中在线查看【错误日志】
一. 在NuGet下载Elmah.MVC dll文件! 或者点击下载dll文件,并且引用客户端. 二.配置WebConfig <sectionGroup name="elmah& ...
- 使用Log4Net进行错误日志记录
http://blog.csdn.net/zdw_wym/article/details/48802821
- MVC 中使用log4net 打印重复日志解决方法
最近在项目中引用log4net 来打印日志,会发现在同一时间点 打印重复记录: 详见图
随机推荐
- Java Web中提交表单之后跳转到WebContent目录下的子目录里的jsp文件
最近在做一个系统,需要完成登录动能进行跳转到另一个页面.在这个项目里面,我把 jsp,css,js文件都统一放在 WebContent 目录下的一个 WebPage 里面. 按照以前的习惯,写好了 s ...
- jdk中的简单并发,需要掌握
前言 开心一刻 小时候有一次爸爸带我去偷村头别人家的梨子,我上树摘,爸爸在下面放风,正摘着主人来了,爸爸指着我破口大骂:臭小子,赶紧给我滚下来,敢偷吃别人家梨子,看我不打死你.主人家赶紧说:没事没事, ...
- 无需操作系统直接运行 Python 代码
Josh Triplett以一个“笑点”开始了他在PyCon 2015上的演讲:移植Python使其无需操作系统运行:他和他的英特尔同事让解释器能够在GRUB引导程序.BIOS或EFI系统上运行.连演 ...
- JavaScript 系列博客(六)
JavaScript 系列博客(六) 前言 本篇博客介绍 js 操作高级,通过 js 获取标签的全局属性.设置标签的全局属性,以及事件的绑定与取消.js 盒模型与 js 动画. 对象使用的高级 对象的 ...
- 前端学习(一) —— HTML
1.js跳转 window.location.href='url'; 2.div显示与隐藏 hide() show() 3.判断是否为一个字符串是否为整形 function isInt(str){ v ...
- [转]php 图片验证码生成 前后台验证
本文转自:https://www.cnblogs.com/xiaoyezi/p/3541195.html 自己从前一段时间做了个php小项目,关于生成图片验证码生成和后台的验证,把自己用到的东西总结一 ...
- 操作数据库出现InvalidOpertionException(内部连接致命错误)
用DataTables时并发访问量较大,单个任务操作(获取数据)时间较长.连接数过多的时候就出现InvalidOpertionException错误.知道哪里有问题那就好办了,对GetDataTabl ...
- Jmter接口网站压力测试工具使用记录
1.首先下载Jmeter 官方地址:http://jmeter.apache.org/ 2.安装Jmeter 把下载的文件进行解压,产生如下目录: 打开bin文件夹下的jmeter.bat文件及进入程 ...
- [javaEE] web应用的目录结构&配置虚拟主机
myWebSite | |-- 静态资源和JSP文件都可以直接放在web应用目录下,浏览器可以直接访问 |-- WEB-INF 浏览器没有办法直接访问 |-- classes 动态web运行时的cla ...
- [android] 利用广播实现ip拨号
广播接收者,broadcast receiver,安卓系统在使用时会产生很多的事件,比如:短信到来,电量低,拨打电话等等 界面布局,线性布局,EditText指定为电话号码,设置属性android:i ...