zoukankan      html  css  js  c++  java
  • ASP.NET中使用log4net记录日志

    Log4net是基于.net开发的一款非常著名的记录日志开源组件,最早是2001年7月由NeoWorks Limited启动的项目,它所基本的框架是源于另外的一个也非常著名的姐妹组件-log4j。Log4net可以将日志分不同的等级、不同的样式,将日志输出到不同的媒介。

    Log4net可以从http://logging.apache.org/log4net/index.html网站下载最新版本,引用log4net.dll组件,从你下载下来的src目录log4net.sln文件 生成后便会自动编译log4net.dll文件了.

    Logger,Appenders, Filters, Layouts 和Object Renders是其基本组成部分(用于B/S中webconfig或者C/S Appconfig ).

    1.Logger
    记录日志分类:Log4net能够以多种方式输出日志,主要媒介有数据库(包括MS SQL Server, Access, Oracle9i,Oracle8i,DB2,SQLite),控制台,文件,事件日志(可以用事件查看器查看)和邮件等多种方式。
    记录日志级别:优先级从高到低依次排列FATAL > ERROR > WARN > INFO > DEBUG,此外还有ALL(允许所有的日志请求)和OFF(拒绝所有的日志请求)这两种特殊的级别。

    2.Appenders
    Appenders决定日志输出的方式。Appenders必须实现log4net.Appenders.IAppender接口。
    Log4net主要的输出方式包括:
    AdoNetAppender:将日志记录到数据库中。可以采用SQL和存储过程两种方式。
    AnsiColorTerminalAppender:在ANSI 窗口终端写下高亮度的日志事件。
    AspNetTraceAppender:能用asp.net中Trace的方式查看记录的日志。
    BufferingForwardingAppender:在输出到子Appenders之前先缓存日志事件。
    ConsoleAppender:将日志输出到控制台。
    EventLogAppender:将日志写到Windows Event Log。
    FileAppender:将日志写到文件中。
    LocalSyslogAppender:将日志写到local syslog service (仅用于UNIX环境下)。
    MemoryAppender:将日志存到内存缓冲区。
    NetSendAppender:将日志输出到Windows Messenger service.这些日志信息将在用户终端的对话框中显示。
    RemoteSyslogAppender:通过UDP网络协议将日志写到Remote syslog service。
    RemotingAppender:通过.NET Remoting将日志写到远程接收端。
    RollingFileAppender:将日志以回滚文件的形式写到文件中。
    SmtpAppender:将日志写到邮件中。
    TraceAppender:将日志写到.NET trace 系统。
    UdpAppender:将日志connectionless UDP datagrams的形式送到远程宿主或以UdpClient的形式广播。

    3.Filters
    Appender对象将日志以缺省的方式传到输出流,然后Filter可以按照不同的标准控制日志的输出。Filter可以再配置文件中配置。最简单的形式是在appender中写明一个Threshold.这样只有级别大于或等于此Threshold的日志才被记录。Filters必须实现log4net.Filters.IFilter接口。

    4.Layouts
    Layouts控制日志显示的格式样式。
    日志的显示格式如下:
    "%timestamp [%thread] %-5level %logger - %message%newline"
    Timestamp: 表示程序已经开始执行的时间。 单位[毫秒]。
    Thread:执行当前代码的线程。
    Level:日志的级别。
    Logger:日志相关请求的名称。
    Message: 日志消息。
    Layouts还可以控制日志的输出样式,比如以普通形式或以xml等形式输出。

    5.Object Renderers
    这是很重要的一项,log4net将按照用户定义的标准输出日志消息。Object Renders必须实现log4net.ObjectRenderer.IObjectRenerer接口。

    下面是实例部分,以B/S为例。

    1.在项目中添加log4net.dll的引用

    2.在Global.asax中配置

    void Application_Start(object sender, EventArgs e) 
    {
    log4net.Config.XmlConfigurator.Configure();
    }

    3.在Web.Config中配置

    <configuration>
    <!-- =============== log4net add code =============== -->
    <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
    </configSections>
    <log4net debug="false">
    <!-- ************以文件方式输出并保存到d:\Application.log.txt************ -->
    <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
    <param name="File" value="D:\MyProject\Log4NetSolution\Web\log\log.txt"/>
    <param name="datePattern" value="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>
    <!-- ************以跟踪方式 Asp.net trace方式查看************ -->
    <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">
    <!--输出方式的一种:文本保存到"D:\DCLog\yyyy-MM\yyyy-MM-dd.LOG"中-->
    <file value="D:\DCLog\"/>
    <datePattern value="yyyy-MM/yyyy-MM-dd.LOG"/>
    <appendToFile value="true"/>
    <rollingStyle value="Date"/>
    <staticLogFileName value="false"/>
    <layout type="log4net.Layout.PatternLayout">
    <param name="ConversionPattern" value="%date [%-5level] %n -- %m%n"/>
    </layout>
    <!--输出方式的另一种:文本保存到"D:\Log.txt"中
    <param name="File" value="D:\Log.txt"/>
    <param name="AppendToFile" value="true"/>
    <param name="MaxSizeRollBackups" value="10"/>
    <param name="MaximumFileSize" value="5MB"/>
    <param name="RollingStyle" value="Size"/>
    <param name="StaticLogFileName" value="true"/>
    <layout type="log4net.Layout.PatternLayout">
    <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
    </layout>
    -->
    </appender>
    <!--以数据库的方式输出,插入到SQL数据库(此处以SQL SERVER为例)
    <appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
    <bufferSize value="10" />
    <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    <connectionString value="server=.;database=dbname;uid=sa;pwd=123456;timeout=300;" />
    <commandText value="INSERT INTO Log ([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="50" />
    <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="200" />
    <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%logger" />
    </layout>
    </parameter>
    <parameter>
    <parameterName value="@message" />
    <dbType value="String" />
    <size value="2000" />
    <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%m" />
    </layout>
    </parameter>
    <parameter>
    <parameterName value="@exception" />

    <dbType value="String" />

    <size value="2000" />

    <layout type="log4net.Layout.ExceptionLayout" />
    </parameter>
    </appender>
    -->
    <root>
    <!--日志级别(OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL)-->
    <level value="WARN"/>
    <!--所使用的appender节点的name名称-->
    <appender-ref ref="LogFileAppender"/>
    </root>
    </log4net>
    <!-- =============== log4net add end =============== -->
    <appSettings/>
    <connectionStrings/>
    <system.web>
    <!--
    Set compilation debug="true" to insert debugging
    symbols into the compiled page. Because this
    affects performance, set this value to true only
    during development.
    -->
    <compilation debug="true" targetFramework="4.0"/>
    <!--
    The <authentication> section enables configuration
    of the security authentication mode used by
    ASP.NET to identify an incoming user.
    -->
    <authentication mode="Windows"/>
    <!--
    The <customErrors> section enables configuration
    of what to do if/when an unhandled error occurs
    during the execution of a request. Specifically,
    it enables developers to configure html error pages
    to be displayed in place of a error stack trace.

    <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
    <error statusCode="403" redirect="NoAccess.htm" />
    <error statusCode="404" redirect="FileNotFound.htm" />
    </customErrors>
    -->
    <pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"/></system.web>
    </configuration>

    4.在项目中使用

    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using log4net;
    using log4net.Config;

    public partial class _Default : System.Web.UI.Page
    {
    log4net.ILog logger
    = log4net.LogManager.GetLogger(typeof(_Default));

    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void btnOk_Click(object sender, EventArgs e)
    {
    try
    {
    int num1 = Convert.ToInt32(txtNum1.Text.Trim());
    int num2 = Convert.ToInt32(txtNum2.Text.Trim());
    int res = num1 / num2;
    txtRes.Text
    = res.ToString();
    logger.Info(
    "btnOk_Click 执行成功");
    }
    catch (Exception ex)
    {
    Page.ClientScript.RegisterStartupScript(GetType(),
    "msg", "<script>alert('Faile');</script>");
    logger.Error(
    "btnOk_Click 执行失败:" + ex.Message);
    }
    }
    }

    以上部分是我根据网上搜集的资料和实践总结下来的,希望对大家有帮助哦

  • 相关阅读:
    编写代码的「八荣八耻」- 以用户易用为荣,以复杂歧义为耻
    《跃迁-成为高手的技术》之联机学习
    《跃迁-成为高手的技术》感悟
    JAVA SPI(Service Provider Interface)原理、设计及源码解析(其一)
    测试了一下编解码的执行效果
    谈面试中的亮点
    稳定性「三十六计」实战和背后的逻辑
    Python,Jupyter Notebook,IPython快速安装教程
    Python多进程编程
    R语言基础:数组&列表&向量&矩阵&因子&数据框
  • 原文地址:https://www.cnblogs.com/dannyli/p/2147565.html
Copyright © 2011-2022 走看看