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开源日志组件就好了,源代码下载:
下载地址

posted @ 2015-10-29 10:48  革新  阅读(490)  评论(2编辑  收藏  举报