zoukankan      html  css  js  c++  java
  • log4net--不可多得的开源日志记录组件

    log4net--不可多得的开源日志记录组件

    • 1 前奏
      一直在用log4net日志工具,却没时间写个日志给大家分享一下这个工具,趁最近比较空些,好好分享一下这个工具。
    • 2 说明
      Log4net介绍就不多说,这里说下他的特点:
      1.程序中如果加入了Log输出代码,程序运行过程中就能生成并输出日志信息而无需人工干预。
      2.日志信息可以输出到不同的地方(文件中,控制台中,Windows事件日志,数据库等)
    • 3 开始
      Log4net的官网:官方网站:http://logging.apache.org/log4net/ , 英文好的孩子可以多去官网上瞅瞅,我们可以去官网下载源代码或者dll文件。

      下载文件后,将压缩包解压,我们可以看到解压后的文件

    打开bin目录后,还会看到一个目录

    双击“net”目录,我们可以看到各个版本号的文件夹,打开对应自己.net版本的文件,将dll文件引入到项目中去。

    • 4 编码
      配置config目录
    <?xml version="1.0"?>
    <configuration>
      <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
      </configSections>
      <log4net>
        <!--定义输出到文件中-->
        <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
          <!--定义文件存放位置-->
          <file value="D:/log4netfile.txt" />
          <appendToFile value="true" />
          <rollingStyle value="Date" />
          <datePattern value="yyyyMMdd-HH:mm:ss" />
          <layout type="log4net.Layout.PatternLayout">
            <!--输出格式-->
            <!--样例:2008-03-26 13:42:32,111 [10] INFO  Log4NetDemo.MainClass [(null)] - info-->
            <conversionPattern value="记录时间:%date 线程ID:[%thread] 日志级别:%-5level 出错类:%logger property:[%property{NDC}] - 错误描述:%message%newline" />
          </layout>
        </appender>
        <!--将错误信息插入SQLServer数据库数据链接   插入数据库-->
        <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=(local);database=hyoav10_pro_gdcrm;user id=sa;password=sa!@#$%^*(sa;"/>
          <!--生成表的SQL语句-->
          <!--  CREATE TABLE [dbo].[Log](
          [Id] [int] IDENTITY(1,1) NOT NULL,
          [Date] [datetime] NOT NULL,
          [Thread] [varchar](255) COLLATE Chinese_PRC_CI_AS NOT NULL,
          [Level] [varchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL,
          [Logger] [varchar](255) COLLATE Chinese_PRC_CI_AS NOT NULL,
          [Message] [varchar](4000) COLLATE Chinese_PRC_CI_AS NOT NULL,
          [Exception] [varchar](2000) COLLATE Chinese_PRC_CI_AS NULL
          ) ON [PRIMARY]-->
          <!--插入数据库的SQL语句-->
          <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>
          <!--线程ID-->
          <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>
        <!--定义输出到控制台命令行中-->
        <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
          </layout>
        </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>
        <!--启动记录日志类型-->
        <root>
          <level value="ERROR"/>
          <!--文件形式记录日志-->
          <appender-ref ref="LogFileAppender"/>
          <!--插入数据库-->
          <appender-ref ref="ADONetAppender" />
          <!--<appender-ref ref="ConsoleAppender"/>
          <appender-ref ref="EventLogAppender"/>-->
        </root>
      </log4net>
      <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
      </startup>
    </configuration>
    
    

    紧接着,我们把类也写出来。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    [assembly: log4net.Config.XmlConfigurator(Watch = true)]
    namespace TestLog4Net
    {
        public class Log
        {
            /// <summary>
            /// 自定义错误信息
            /// </summary>
            /// <param name="t">错误的类</param>
            /// <param name="ex">错误信息</param>
            public static void WriteLog(Type t, Exception ex)
            {
                log4net.ILog log = log4net.LogManager.GetLogger(t);
                log.Error("错误", ex);
            }
            /// <summary>
            /// 错误信息
            /// </summary>
            /// <param name="t">错误的类</param>
            /// <param name="msg">错误信息</param>
            public static void WriteLog(Type t, string msg)
            {
                log4net.ILog log = log4net.LogManager.GetLogger(t);
                log.Error(msg);
            }
        }
    }
    

    好了,我们可以开始测试我的成果了
    写入测试的代码

          //第一种记录用法
          //(1)第一个参数是类名称
          //(2)第二个参数是字符串信息
          Log.WriteLog(typeof(FormMain), "测试Log4Net日志是否写入");
          //第二种记录用法
          //(1)第一个参数是类名称
          //(2)第二个参数是需要捕捉的异常块
          //try { 
          //}catch(Exception ex){
          //    LogHelper.WriteLog(typeof(FormMain), ex);
          //}
    

    好,我们可以开始测试了,执行代码,我们会在数据库和txt文档中可以看到错误日志。
    数据库错误日志:

    txt文档错误日志:

    好了,我们的log4.net开源日志组件就好了,源代码下载:
    下载地址

  • 相关阅读:
    夏令营讲课内容整理 Day 6 Part 3.
    夏令营讲课内容整理 Day 6 Part 2.
    计算几何:模板
    字符串:SAM
    字符串:回文自动机
    字符串:马拉车
    数学&模拟:随机化-矩阵随机化
    模拟:随机增量法
    模拟:爬山算法与模拟退火算法
    模拟:压位高精度
  • 原文地址:https://www.cnblogs.com/wjszxli/p/4919708.html
Copyright © 2011-2022 走看看