zoukankan      html  css  js  c++  java
  • Log4Net的使用方法

    介绍日志保存到文本文件和ms sql server的方法

    日志信息保存到.txt文件


    1 在http://logging.apache.org/log4net/downloads.html”下载

    下载incubating-log4net-1.2.10.Zip文件,解压

    在log4net-1.2.10\src下面将log4net.sln用Visual Studio.NET打开,编译后可以得到log4net.dll

    你在解压的文件夹下面还可以看到examples\net\1.0,你将cs-examples方案打开,将看到多个例子子,是学习的好资料

    2 新建项目logweb,添加引用log4net.dll

    3 在文件AssemblyInfo.cs下面加入

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

    其中是ConfigFile="web.config"的web.config是你的配置文件名称,

    这将在第5步中提到

    你将该代码加入Global.asax文件中的namespace前面也可以

    4 在文件Global.asax中

     protected void Application_Start(Objectsender, EventArgs e)

            {

                 log4net.Config.XmlConfigurator.Configure();

            }

    5 定义配置文件

    配置信息可以放在任意的文件中。

    可以是在程序的配置文件里,如AssemblyName.config或web.config.

    也可以是你取的任意名称的文件AppName.exe.Resc等

    log4net框架会在相对于AppDomain.CurrentDomain.BaseDirectory属性定义的目录路径下查找配置文件。框架在配置文件里要查找的唯一标识是<log4net>标签。一个完整的配置文件的例子如下

    <log4net>
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <!--定义输出到文件中-->
        <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
          <!--定义文件存放位置-->
          <file value="log\\" />
          <appendToFile value="true" />
          <rollingStyle value="Date" />
          <!--日志文件路径和文件名称 -->
          <datePattern value="yyyyMM\\yyyyMMdd'.txt'" />
          <staticLogFileName value="false" />
          <param name="MaxSizeRollBackups" value="100" />
          <layout type="log4net.Layout.PatternLayout">
            <!--记录日志的格式内容-->
            <conversionPattern value="日志级别:%-5level %message%newline" />
          </layout>
          <!--日志顺序 级别从低到高Debug,Info,Warn,Error,Fatal-->
          <filter type="log4net.Filter.LevelRangeFilter">
            <levelMin value="Debug" />
            <levelMax value="Fatal" />
          </filter>
        </appender>
        <!--定义输出到windows事件中-->
        <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
          </layout>
        </appender>
        <!--定义输出到数据库中,这里举例输出到Access数据库中,数据库为C盘的log4net.mdb-->
        <appender name="AdoNetAppender_Access" type="log4net.Appender.AdoNetAppender">
          <connectionString value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:log4net.mdb" />
          <commandText value="INSERT INTO LogDetails ([LogDate],[Thread],[Level],[Logger],[Message]) VALUES (@logDate, @thread, @logLevel, @logger,@message)" />
          <!--定义各个参数-->
          <parameter>
            <parameterName value="@logDate" />
            <dbType value="String" />
            <size value="240" />
            <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%date" />
            </layout>
          </parameter>
          <parameter>
            <parameterName value="@thread" />
            <dbType value="String" />
            <size value="240" />
            <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%thread" />
            </layout>
          </parameter>
          <parameter>
            <parameterName value="@logLevel" />
            <dbType value="String" />
            <size value="240" />
            <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%level" />
            </layout>
          </parameter>
          <parameter>
            <parameterName value="@logger" />
            <dbType value="String" />
            <size value="240" />
            <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%logger" />
            </layout>
          </parameter>
          <parameter>
            <parameterName value="@message" />
            <dbType value="String" />
            <size value="240" />
            <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%message" />
            </layout>
          </parameter>
        </appender>
        <root>
          <level value="DEBUG"/>
          <!--文件形式记录日志 ERROR-->
          <appender-ref ref="RollingLogFileAppender" />
          <!--Windows事件日志-->
          <!--<appender-ref ref="EventLogAppender" />-->
          <!-- 如果不启用相应的日志记录,可以通过这种方式注释掉
          <appender-ref ref="AdoNetAppender_Access" />
          -->
        </root>
      </log4net>

    如果是在app.config中,还需要增加

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

    我们逐步描述下我们使用的日志:

        <root>
           <level value="DEBUG" />
           <appender-ref ref="LogFileAppender" />
       </root>

    root代表了根日志

    <level value="DEBUG" /> 代表了日志级别

    在<root>标签里,可以定义level级别值和Appender的列表。如果没有定义LEVEL的值,则缺省为DEBUG。可以通过<appender-ref>标签定义日志对象使用的Appender对象。<appender-ref>声明了在其他地方定义的Appender对象的一个引用。在一个logger对象中的设置会覆盖根日志的设置。而对Appender属性来说,子日志对象则会继承父日志对象的Appender列表。

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

    定义子日志对象 ,不同的Appender对象还有不同的param,具体可以去config-examples.html

    6 在界面WebForm1.aspx上面

    拖放一个button 在事件里面写如代码:

    log4net.ILog log =log4net.LogManager.GetLogger(typeof(this));          //log.Logger.Name
    log.Debug("这是我在使用Log4Net");

    运行应用程序,点击button 。

    在C:\下面打开文件Applog.txt 可以看到我们写的日志

    日志信息保存到MSSQL数据库中


    1-4步骤与将“日志信息保存到.txt文件”相同

    5.建立数据表 假如

     CREATE TABLE [dbo].[Log] (

          [Id] [int] IDENTITY (1, 1) NOT NULL,

          [Date] [datetime] NOT NULL,

          [Thread] [varchar] (255) NOT NULL,

          [Level] [varchar] (50) NOT NULL,

          [Logger] [varchar] (255) NOT NULL,

          [Message] [varchar] (4000) NOT NULL,

          [Exception] [varchar] (2000) NULL

    )

    6 .定义日志文件其中注释处为注意的地方,特注意要写好连接的数据库的字符串。

    <configSections>

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

    </configSections>

    <log4net debug="false">

       
    <root>

        
    <levelvalue="ALL"/>          

       
    <appender-ref ref="ADONetAppender"/>      

       
    </root>

       
    <!--

        定义loger的名称和使用的appender

       
    -->

       
    <logger name="AA">

        
    <levelvalue="ALL"/>           

       
    <appender-ref ref="ADONetAppender"/>                  

       
    </logger>       

       
    <appender name="ADONetAppender"type="log4net.Appender.AdoNetAppender">

        
    <!--

        定义几条存入数据库 有2条时才写入数据库,没有两条叫缓存

       
    -->

        
    <bufferSize value="2" />

        
    <connectionType value="System.Data.SqlClient.SqlConnection,System.Data, Version=1.0.3300.0, Culture=neutral,PublicKeyToken=b77a5c561934e089" />

        
    <connectionStringvalue="database=Northwind;server=CEC-HUANGXX;UserID=sa;Password=sa" />

        
    <commandText value="INSERT INTO Log([Date],[Thread],[Level],[Logger],[Message],[Exception]) 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="255" />

             
    <layout type="log4net.Layout.PatternLayout">

                 
    <conversionPattern value="%thread" />

             
    </layout>

        
    </parameter>

        
    <parameter>

             
    <parameterName value="@log_level" />

             
    <dbType value="String" />

            
    <size value="50" />

             
    <layout type="log4net.Layout.PatternLayout">

                 
    <conversionPattern value="%level" />

             
    </layout>

        
    </parameter>

        
    <parameter>

             
    <parameterName value="@logger" />

             
    <dbType value="String" />

            
    <size value="255" />

             
    <layout type="log4net.Layout.PatternLayout">

                 
    <conversionPattern value="%logger" />

             
    </layout>

        
    </parameter>

        
    <parameter>

             
    <parameterName value="@message" />

             
    <dbType value="String" />

            
    <size value="4000" />

             
    <layout type="log4net.Layout.PatternLayout">

                 
    <conversionPattern value="%message" />

             
    </layout>

        
    </parameter>

        
    <parameter>

             
    <parameterName value="@exception" />

             
    <dbType value="String" />

            
    <size value="2000" />

             
    <layout type="log4net.Layout.ExceptionLayout" />

        
    </parameter>

    </appender>

    </log4net>

    7 在界面WebForm1.aspx上面

    拖放一个button 在事件里面写如代码:

    log4net.ILog log =log4net.LogManager.GetLogger("AA");          //log.Logger.Name

    log.Debug("这是我在使用Log4Net");

    运行应用程序,多次点击button 。

    在数据库里面去查询,就可以看到日中记录

  • 相关阅读:
    面向对象之继承
    面向对象之封装
    进程相关(一)
    面向对象之反射,元类
    实现效果从中间变大
    如何扒一个网站
    java例程练习(引用类型数据的排序和查找)[外篇]
    java例程练习(Iterator)
    java例程练习(增强的for循环)
    java例程练习(Map接口及自动打包、解包)
  • 原文地址:https://www.cnblogs.com/tuyile006/p/1522689.html
Copyright © 2011-2022 走看看