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

简介:   asp.net利用log4net写入日志到SqlServer数据库,Log4net是一个开源的错误日志记录项目,易用性强,源自log4j,品质值得信赖。 下面就我的安装部署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 事件中写入

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

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

 

  数据库生成脚本

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

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
目录
相关文章
|
6月前
|
SQL Java 数据库连接
除了JDBC,还有哪些常见的数据库访问技术?
除了JDBC,还有哪些常见的数据库访问技术?
552 2
|
7月前
|
监控 Java 关系型数据库
HikariCP 高性能数据库连接池技术详解与实践指南
本文档全面介绍 HikariCP 高性能数据库连接池的核心概念、架构设计和实践应用。作为目前性能最优异的 Java 数据库连接池实现,HikariCP 以其轻量级、高性能和可靠性著称,已成为 Spring Boot 等主流框架的默认连接池选择。本文将深入探讨其连接管理机制、性能优化策略、监控配置以及与各种框架的集成方式,帮助开发者构建高性能的数据访问层。
487 1
|
7月前
|
监控 Java 关系型数据库
HikariCP 高性能数据库连接池技术详解与实践指南
本文档全面介绍 HikariCP 高性能数据库连接池的核心概念、架构设计和实践应用。作为目前性能最优异的 Java 数据库连接池实现,HikariCP 以其轻量级、高性能和可靠性著称,已成为 Spring Boot 等主流框架的默认连接池选择。本文将深入探讨其连接管理机制、性能优化策略、监控配置以及与各种框架的集成方式,帮助开发者构建高性能的数据访问层。
777 8
|
7月前
|
SQL 数据管理 BI
数据库操作三基石:DDL、DML、DQL 技术入门指南
本文围绕数据库操作核心语言 DDL、DML、DQL 展开入门讲解。DDL 作为 “结构建筑师”,通过CREATE(建库 / 表)、ALTER(修改表)、DROP(删除)等命令定义数据库结构;DML 作为 “数据管理员”,以INSERT(插入)、UPDATE(更新)、DELETE(删除)操作数据表记录,需搭配WHERE条件避免误操作;DQL 作为 “数据检索师”,通过SELECT结合WHERE、ORDER BY、LIMIT等子句实现数据查询与统计。三者相辅相成,是数据库操作的基础,使用时需注意 DDL 的不可撤销性、DML 的条件约束及 DQL 的效率优化,为数据库学习与实践奠定基础。
|
8月前
|
缓存 关系型数据库 MySQL
MySQL数据库性能调优:实用技术与策略
通过秉持以上的策略实施具体的优化措施,可以确保MySQL数据库的高效稳定运行。务必结合具体情况,动态调整优化策略,才能充分发挥数据库的性能潜力。
326 0
|
10月前
|
存储 人工智能 关系型数据库
诚邀您参加《智启云存:AI时代数据库RDS存储新突破》线上闭门技术沙龙!
诚邀您参加6月11日(周三)14:00在线上举行的《智启云存:AI时代数据库RDS存储新突破》闭门活动。免费报名并有机会获得精美礼品,快来报名吧:https://hd.aliyun.com/form/6162
|
11月前
|
人工智能 关系型数据库 分布式数据库
媒体声音|从亚太到欧美,阿里云瑶池数据库凭何成为中企出海的技术底气?
在中企出海的时代浪潮中,瑶池数据库正凭借其技术创新、场景化解决方案、智能化能力、全球化布局,成为企业跨越挑战、构建全球竞争力的关键伙伴;同时也以硬核的技术实力证明了中国数据库的国际竞争力。
|
11月前
|
安全 Apache 数据库
【倒计时3天】NineData x Apache Doris x 阿里云联合举办数据库技术Meetup,5月24日深圳见!
5月24日,NineData联合Apache Doris与阿里云在深圳举办数据库技术Meetup。活动聚焦「数据实时分析」与「数据同步迁移」两大领域,邀请行业专家分享技术趋势、产品实践及解决方案,助力企业构建高效安全的数据管理体系。时间:14:00-17:30;地点:深圳新一代产业园2栋20楼会议室。线下名额有限(80人),速报名参与深度交流!
311 1
|
11月前
|
监控 容灾 算法
阿里云 SLS 多云日志接入最佳实践:链路、成本与高可用性优化
本文探讨了如何高效、经济且可靠地将海外应用与基础设施日志统一采集至阿里云日志服务(SLS),解决全球化业务扩展中的关键挑战。重点介绍了高性能日志采集Agent(iLogtail/LoongCollector)在海外场景的应用,推荐使用LoongCollector以获得更优的稳定性和网络容错能力。同时分析了多种网络接入方案,包括公网直连、全球加速优化、阿里云内网及专线/CEN/VPN接入等,并提供了成本优化策略和多目标发送配置指导,帮助企业构建稳定、低成本、高可用的全球日志系统。
1070 54

热门文章

最新文章

下一篇
开通oss服务