asp.net利用log4net写入日志到SqlServer数据库

  asp.net利用log4net写入日志到SqlServer数据库,Log4net是一个开源的错误日志记录项目,易用性强,源自log4j,品质值得信赖。 下面就我的安装部署log4net到MS sql server的经验与大家分享。

  下载log4net的Dll文件并引入到项目中,在你的web主项目(比如MainWeb.csproj)添加对log4net.dll的引用,并在相应的Globall.cs文件中的Application_Start 事件中写入

protected void Application_Start(Object sender, EventArgs e) { // log4net.Config.XmlConfigurator.Configure( new System.IO.FileInfo( "log4net.config" )); }

在这个项目对应的Assembly.cs文件中添加一行

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config" , Watch = true )]

这里有个地方需要注意

  如果我的主项目是纯粹的代码分离后的aspx\ascx文件, 不含cs文件,那么中需要在饱含cs文件的项目(比如common.web.csproj)文件中添加这两行代码

  举个例子

  解决方案如下:

MySolution.Sln

|-----common.Web.csproj(包含cs文件)

|-----Business1.Web.csproj(包含cs文件,继承自common.Web.csproj)

|-----Business********.Web.csproj(包含cs文件,继承自common.Web.csproj)

|-----BusinessX.Web.csproj(包含cs文件,继承自common.Web.csproj)

   |-----MainWeb.csproj(不包含cs文件)

  此时, 只需要在 common.Web.csproj 中做以上动作就可以了!其他项目只需要引用 dll即可。

  第三步:添加logn4net.confgi在主项目根目录下:与web.config同路径,之所以不写入web,config文件, 是因为这样可以单独修改调试部署,也就是非侵入式安装的思想。呵呵。

  内容大概如下:

<?xml version="1.0"?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> </configSections> <!--Log4net Begin by Tony 2008.11.20--> <log4net> <appender name="ADO
NetAppender" 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=DBErrorLogs;SERVER=myserver;UID=user;PWD=pwdpwd;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> <!--Log4net End--> </configuration>

基本完成了!需要注意的一个参数

  数据库生成脚本

CREATE TABLE [dbo].[ErrorLog]( [nId] [bigint] IDENTITY(1,1) NOT NULL, [dtDate] [datetime] NOT NULL, [sThread] [varchar](100) NOT NULL, [sLevel] [varchar](200) NOT NULL, [sLogger] [varchar](500) NOT NULL, [sMessage] [varchar](3000) NOT NULL, [sException] [varchar](4000) NULL)

  第四步:在需要记录的每个类中添加如下代码

private static log4net.ILog myLogger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

给出一个例子

private void TestLog() { try { // } catch (Exception ex) { Loghandle by Tony 2008.11.21#region Loghandle by Tony 2008.11.21 string loginid = EmptyString; //if (user != null) { loginid = user.LoginID; } myLogger.Error(GetErrorMessage(loginid, 1), ex); //Debug("系统已记录错误,请联系管理员!"); return; //Debug(ErrorHandle.GetErrorInfoByID(999), this.ClientID); return; #endregion } }

<bufferSize value="10" />,表示是记录10 条到缓冲区,满10条后再写入SQL server

  调试时可以改为1,实际应用建议为100

时间: 2024-09-20 17:40:30

asp.net利用log4net写入日志到SqlServer数据库的相关文章

一起谈.NET技术,asp.net利用log4net写入日志到SqlServer数据库

asp.net利用log4net写入日志到SqlServer数据库,Log4net是一个开源的错误日志记录项目,易用性强,源自log4j,品质值得信赖. 下面就我的安装部署log4net到MS sql server的经验与大家分享. 下载log4net的Dll文件并引入到项目中,在你的web主项目(比如MainWeb.csproj)添加对log4net.dll的引用,并在相应的Globall.cs文件中的Application_Start 事件中写入 protected void Applica

通过事务日志恢复SqlServer数据库到一个特定的时间点

Code--创建测试数据库CREATE DATABASE DbGO --对数据库进行备份BACKUP DATABASE Db TO DISK='c:\db.bak' WITH FORMATGO --创建测试表CREATE TABLE Db.dbo.TB_test(ID int) --延时1秒钟,再进行后面的操作(这是由于SQL Server的时间精度最大为百分之三秒,不延时的话,可能会导致还原到时间点的操作失败)WAITFOR DELAY '00:00:01'GO --假设我们现在误操作删除了 

SqlServer数据库提示 “tempdb” 的日志已满 问题解决方案_MsSql

执行sql 语句,中间没有用到临时表 提示服务器: 消息 9002,级别 17,状态 2,行 1 数据库 'tempdb' 的日志已满.请备份该数据库的事务日志以释放一些日志空间. 网上找了下解决方案,大体是扩大临时库的日志文件的大小解决的 解决过程: 查看了下数据库的属性,是自动增长,不指定文件大小上限. 在网上Google了很久,试了些方法都不行:数据库所在磁盘还有很大的可用空间,试着下重药了. 直接把tempdb的数据文件和日志文件的大小改为3000M, 问题解决. 记录一下清空日志的命令

sqlserver-如何利用log4net为用C#写的学生信息管理系统创建log日志

问题描述 如何利用log4net为用C#写的学生信息管理系统创建log日志 我用Visual Studio和SQL Server写的学生信息管理系统,如何用log4net为系统自动创建日志.我先前在网上找了一些资料,不过都是需要点击button控件来触发事件建立log日志,我想要和一般的日常应用软件那样能够在系统运行的时候能够自动生成文本形式的日志,请问各位大神如何实现.最好给一个实例参考一下,感激不尽. 解决方案 没有彻底的自动的.程序必竟要人来写.可以在关键事件.方法记日志,倒不一定要在bu

利用IIS、Zblog、SQLServer搭建ASP博客

看到文章的标题,你就有可能发笑了.现在建一个网站或者博客还需要使用IIS吗? 说了不怕各位笑话,我到目前为止对IIS还真的不怎么了解呢.今天刚刚好,趁着这个机会搭建一个以SQLServer为数据库.IIS为web容器的ASP博客.该博客使用的Zblog的程序代码. 要建立此博客,我们需要做三部分工作. 1.相关环境的配置 2.SQLServer数据库的安装及配置 3.IIS的配置 4.Zblog的安装及配置 第一部分.相关环境的配置 对相关的环境的配置,我们所需要做的不多.此次实验我们是在虚拟机

.NET Core的日志[5]:利用TraceSource写日志

从微软推出第一个版本的.NET Framework的时候,就在"System.Diagnostics"命名空间中提供了Debug和Trace两个类帮助我们完成针对调试和跟踪信息的日志记录.在.NET Framework 2.0中,微软引入了TraceSource并对跟踪日志系统进行了优化,优化后的跟踪日志系统在.NET Core中又经过了相应的简化..NET Core的日志模型借助TraceSourceLoggerProvider实现对TraceSource的整合,在正式介绍这个Log

【转】使用Log4Net进行日志记录

     首先说说为什么要进行日志记录.在一个完整的程序系统里面,日志系统是一个非常重要的功能组成部分.它可以记录下系统所产生的所有行为,并按照某种规范表达出来.我们可以使用日志系统所记录的信息为系统进行排错,优化系统的性能,或者根据这些信息调整系统的行为.      Log4net是一个很著名的开源的日志记录组件.官方网址为:http://logging.apache.org/log4net/ ,使用Log4net能够很简单的为我们的程序添加日志记录功能.下面我们先通过一个网站例子来说明如何在

asp连接sqlserver数据库实现代码

 本文章介绍了利用asp连接sqlserver数据库实例代码,连接方法有三种分别为通过ODBC DSN建立连接,通过oledb建立连接 通过driver建立连接三种,下面我们来看看第一种.   通过driver建立连接  代码如下   <%  Const DataBaseType=1  If DataBaseType=0 then  DBPath="/jb51/news.asp"  SqlNowString = "Now()"  ystr=true  nstr

IE10、IE11 User-Agent 导致的 ASP.Net 网站无法写入Cookie 问题

原文:IE10.IE11 User-Agent 导致的 ASP.Net 网站无法写入Cookie 问题 你是否遇到过当使用一个涉及到Cookie操作的网站或者管理系统时,IE 6.7.8.9下都跑的好好的,唯独到了IE10.11这些高版本浏览器就不行了?好吧,这个问题码农连续2天内遇到了2次.那么,我们就来看看,这个问题的前因后果. 先说下这2次的使用场景,一次是在某页面中,先存Cookie,然后再入库记录相关数据,但是发布到生产环境后,入库操作没有发生:后来通过打印日志发现问题卡在这里: if