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

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

作者: Kein  来源: 博客园  发布时间: 2010-10-14 07:19  阅读: 6427 次  推荐: 6   原文链接   [收藏]

摘要:Log4net是一个开源的错误日志记录项目,asp.net利用log4net写入日志到SqlServer数据库。下面就我的安装部署log4net到MS sql server的经验与大家分享。

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

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

?


1

2

3

4

protected   void  Application_Start(Object sender, EventArgs e) 

        { //

            log4net.Config.XmlConfigurator.Configure( new  System.IO.FileInfo( "log4net.config" ));

        }

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

?


1

[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文件, 是因为这样可以单独修改调试部署,也就是非侵入式安装的思想。呵呵。

  内容大概如下:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

<?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="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=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

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

  数据库生成脚本

?


1

2

3

4

5

6

7

8

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)

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

?


1

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

给出一个例子

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

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

6

0

时间: 2024-10-26 20:25:56

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

关于使用Log4Net将日志插入oracle数据库中

1.关于配置文件. <?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="log4net" type="System.Configuration.IgnoreSectionHandler" /> </configSections> <log4

log4net 写入日志到不同的位置

某些业务需要根据不同的功能将日志记录到不同的位置,以便于区分. <?xml version="1.0" encoding="utf-8" ?> <log4net> <appender name="Console" type="log4net.Appender.ConsoleAppender"> <layout type="log4net.Layout.PatternLayou

log4net在release模式下无法生成文件或不写入日志

在Debug模式一切正常,但是在release模式下log4net不工作,查了很多资料,终于解决.具体做如下检查修改. 1.检查log4net写入日志文件路径是否正确: 2.检查对应日志文件路径是否有权限: 3.检查程序log4net配置获取路径: 最常见的问题是第三步,一般都是在AssemblyInfo.cs文件中写入如下代码 [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Config

也用 Log4Net 之将日志记录到数据库的配置 (一)

也用 Log4Net  之将日志记录到数据库的配置 (一) 前段时间我一直想做一个通用一点的日志记录系统,可以便于不同的业务组调用进行日志记录及分析.本来打算着自己下手写一个,后面发现各业务组可能会需要不同的记录方式,比如利用数据库来记录,用txt的文件形式来记录,当然,这些都是最常用的记录方式.而且不同的业务组都希望有自己的记录数据表,不希望和其他业务组的数据混在一起.于是我先前设想的架构方式也就付之一炬了,因为不够灵活,而且实现难度大.周期长.恰在此时想起了之前做项目的时候用的 Log4Ne

SQLSERVER数据库死锁与优化杂谈

死锁杂谈 当数据库死锁时,SqlServer会释放一个优先级较低的锁,让另一个事务运行:所以,即时去捕捉数据库死锁,是挺不容易的. 如果,数据库死锁比较长时间,那么死锁是可以被捕捉的. 可以用SqlServer活动监视器来查看,哪些进程锁了数据库. 首先打开SqlServer活动监视器,然后可以看到,界面里有进程,查看资源,数据文件I/O,最近消耗大量资源的查询四项. 四项显示内容如下: 进程:在进程里可以看到哪些进程被阻塞,查看属性[阻塞者]可以看到,[阻塞者]的会话ID. 等待资源:等待资源

如何利用log4Net自定义属性配置功能记录完整的日志信息

log4Net作为专业的log记录控件,对于它的强大功能大家一定不陌生.下面我将详细介绍如何利用其自定义属性,让日志信息更完整. 一,创建测试工程,log4Net组件可以自己从网上下载,也可通过Nuget进行安装. 二,创建日志模型及数据库表,因为我们的日志信息可以输出为文本,也可以输出到数据库. 三,添加MyLayout,MyPatternConverter类扩展PatternLayout. 四,添加Log4Net.config文件,进行输入方式定义. <?xml version="1.

Log4Net异常日志记录在asp.net mvc3.0的应用

前言 log4net是.Net下一个非常优秀的开源日志记录组件.log4net记录日志的功能非常强大.它可以将日志分不同的等级,以不同的格式,输出到不同的媒介.本文主要是简单的介绍如何在Visual Studio2010(Asp.Net Mvc3.0)中使用log4net快速创建系统日志,如何扩展以输出自定义字段. 用户可以从http://logging.apache.org/log4net/下载log4net的源代码.解压软件包后,在解压的src目录下将log4net.sln载入Visual

Asp.net 使用log4net日志功能

Asp.net使用log4net日志功能 1. 在bin文件夹下面引入 log4net.dll.你只需要引入log4net.dll 既可,其他dll是我抠图的时候扣多了 2 . Global.asax 中加入 void Application_Start(object sender,EventArgs e) { // 在应用程序启动时运行的代码 log4net.Config.DOMConfigurator.Configure(); } 3.修改配置文件(web.config) log日志既可以写

ASP.NET使用log4Net日志组件教程(按日期与按日志大小切割)

对于一个大型网站与系统来说,日志是必备的工具,通过日志你可以非常清楚程序的运行情况,及时得到反馈来解决问题,下面介绍ASP.NET版本的log4Net日志组件是个非常强大的工具,最新版本for .net2.0 1.2.10.0 本人搞了一天,终于知道搞清楚怎样使用了,简单记录一下. 以下介绍的方法是log4net使用单独的配置文件的. 开始行动: 第一步:在项目引用log4net.dll文件 第二步: 在Web.config文件中加入一句代码,位置如下: <configuration>