• VS2008:log4net.dll 使用


    Log4net是基于.net开发的一款非常著名的记录日志开源组件。他最早是20017月由NeoWorks Limited启动的项目,基本的框架源于另外的一个非常著名的姐妹组件-log4jLog4net记录日志的功能非常强大。它可以将日志分不同的等级,比不同的样式,将日志输出到不同的媒介。

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

    ..这一步我将给大家讲解log4net的用法.

    在之前先把其基本知识介绍给大家.

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


    a)Logger(日志)


    1. 记录日志的分类:

    Log4net能够以多种方式输出日志。支持的日志输出常用的主要媒介有数据库(包括MS SQL Server, Access, Oracle9i,Oracle8i,DB2,SQLite,控制台,文件,事件日志(可以用事件查看器查看)和邮件等多种方式。


    2. 日志的级别

    Log4net支持多种级别的日志。优先级从高到低依次排列如下:

    FATAL > ERROR > WARN > INFO > DEBUG

    此外还有ALL(允许所有的日志请求)和OFF(拒绝所有的日志请求)这两种特殊的级别。


    b)Appenders


    Appenders决定日志输出的方式。

    Appenders必须实现log4net.Appenders.IAppender接口。


    Log4net目前支持的输出方式包括:
    1 AdoNetAppender
         将日志记录到数据库中。可以采用SQL和存储过程两种方式。

    2 AnsiColorTerminalAppender
         在ANSI 窗口终端写下高亮度的日志事件。

    3 AspNetTraceAppender
         能用asp.net中Trace的方式查看记录的日志。

    4 BufferingForwardingAppender
         在输出到子Appenders之前先缓存日志事件。

    5 ConsoleAppender
         将日志输出到控制台。

    6 EventLogAppender
         将日志写到Windows Event Log.

    7 FileAppender
         将日志写到文件中。

    8 LocalSyslogAppender
         将日志写到local syslog service (仅用于UNIX环境下).
    9 MemoryAppender
         将日志存到内存缓冲区。

    10 NetSendAppender
         将日志输出到Windows Messenger service.这些日志信息将在用户终端的对话框中显示。

    11 RemoteSyslogAppender
         通过UDP网络协议将日志写到Remote syslog service。

    12 RemotingAppender
         通过.NET Remoting将日志写到远程接收端。

    13 RollingFileAppender
         将日志以回滚文件的形式写到文件中。

    14 SmtpAppender
         将日志写到邮件中。

    15 TraceAppender
         将日志写到.NET trace 系统。

    16 UdpAppender
         将日志connectionless UDP datagrams的形式送到远程宿主或以UdpClient的形式广播。


    c)Filters


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

    Filters必须实现log4net.Filters.IFilter接口。


    d)Layouts


    Layouts控制日志显示的格式样式。日志的显示格式如下:

    "%timestamp [%thread] %-5level %logger - %message%newline"

    Timestamp: 表示程序已经开始执行的时间。 单位[毫秒]。

    Thread:执行当前代码的线程。

    Level:日志的级别。

    Logger:日志相关请求的名称。

    Message: 日志消息。


    Layouts还可以控制日志的输出样式,比如以普通形式或以xml等形式输出。


    e)Object Renderers


    这是很重要的一项,log4net将按照用户定义的标准输出日志消息。

    Object Renders必须实现log4net.ObjectRenderer.IObjectRenerer接口。

     

    .对上面的知识可能大家一知半解,没有关系,下面进入实例部分.

    首先,也是必不可少的部分,在中application_start 中加入log4net.Config.XmlConfigurator.Configure();如果没的Global.asax,则添加一个全局应用程序类

    其次,配置webconfig(这里我以B/S为例)

    具体配置如下:

    四种appender方法:

    <configuration>

         <configSections>

             <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>

         </configSections>

         <appSettings/>

         <connectionStrings/>

        <log4net debug="false">

            <!--以文件方式输出并保存到D:\Application.log.txt-->

            <appender name="LogFileAppender" type="log4net.Appender.FileAppender">

                <param name="File" value="D:\Application.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>

            <!--以流的方式输出并保存至D:\DCLog\ yyyy-MM\yyyy-MM-dd.LOG -->

            <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">

                <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=a;uid=sa;pwd=123;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>

                <level value="ALL"/>

                <!--value="日志级别(OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL)"-->

                <appender-ref ref="RollingLogFileAppender"/>

                <!--ref="你所有的appender节点的name名称"-->

            </root>

        </log4net>

        <!-- ===============log4net add end2=============== -->

    接下来,紧接着用如下方式调用你的appender

    <root>

                  <level value="DEBUG"/>

                  <appender-ref ref="ADONetAppender"/> ref=你所有的appender节点的name名称 ””

             </root>

    </log4net>

     

    最后一步当然就是cs文件中使用了

    首先当然要引用log4net.dll组件了,从你下载下来的src目录log4net.sln文件生成后便会自动编译log4net.dll文件了

    引用后便能加入using log4net;

                   Using log4net.config;了

    要想输出日志先log4net.ILog logger=log4net.LogManager.GetLogger(typeof(_Default));

    作为实例化日志首要条件.

    接着就可以用logger.info();

    使用例子:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using log4net;
    using log4net.Config;


    namespace DemoVS2008
    {
        public partial class WebForm1 : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
               
            }

            protected void Button1_Click(object sender, EventArgs e)
            {
                log4net.ILog logger = log4net.LogManager.GetLogger(typeof(WebForm1));
                try
                {
                    int[] num = new int[5];
                    num[0] = 0;
                    num[1] = 1;
                    num[2] = 2;
                    num[3] = 3;
                    num[4] = 4;
                    num[5] = 5;
                    Page.ClientScript.RegisterStartupScript(Page.GetType(), "notice", "<script>alert('Hello World !');</script>");
                    logger.Debug("调用RegisterStartupScript()方法");

                    logger.Debug("调试");
                    logger.Error("这是一个错误日志");
                    logger.Fatal("这是一个致命的错误日志");
                    logger.Warn("这是一条警告日志");
                    logger.Info("这是一条普通信息");

                }
                catch (Exception ex)
                {
                    logger.Info("数组越界" + ex.Message, ex);
                }
            }
        }
    }

    滄海一粟
  • 相关阅读:
    那些年坑爹的JS题目
    CSS(十三).高度如何铺满全屏
    JS模式和原型精解
    CSS(十二).transition的应用之CSS中心扩散
    一些值得记录的面试题
    随笔
    原生Ajax实现
    code和pre竟然有区别!!!!
    原生JS轮播-各种效果的极简实现(二)面向对象版本的实现和优化
    原生JS轮播-各种效果的极简实现
  • 原文地址:https://www.cnblogs.com/zhanghaichang/p/1967322.html
Copyright © 2020-2023  润新知