`

log4Net简介

    博客分类:
  • C#
阅读更多
使用log4Net可以将系统听日志保存到DB、日志文件、邮箱中等,本文介绍这三种三方式。
生产关系log4Net的配置文件结构中下;

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="HR.Class.Log" type="HR.Class.Log.Config.HR.Class.LogConfigurationSectionHandler,HR.Class.Log" />
  </configSections>
  <HR.Class.Log>


    <!--HRAdoNet:将日志写入数据库表-->
    <appender name="HRAdoNet" type="HR.Class.Log.Appender.ADONetAppender">
      <param name="BufferSize" value="50" /><!-- 当日志达到50条时进行一次写库操作-->
      <!--写入数据库的分段大小-->
      <param name="ConnectionType" value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      <param name="ConnectionString" value="Server=localhost;Database=AuditSystem;User ID=sa;Password=system;Trusted_Connection=False" />
      <param name="CommandType" value="StoredProcedure" />
      <param name="CommandText" value="sp_HR_Log" />
      <!--spLog_Create:存储过程名称-->
      <param name="Parameter">
        <param name="ParameterName" value="@log_date" />
        <param name="DbType" value="DateTime" />
        <param name="Layout" type="HR.Class.Log.Layout.RawTimeStampLayout" />
      </param>
      <param name="Parameter">
        <param name="ParameterName" value="@thread" />
        <param name="DbType" value="String" />
        <param name="Size" value="255" />
        <param name="Layout" type="HR.Class.Log.Layout.PatternLayout">
          <param name="ConversionPattern" value="%t" />
        </param>
      </param>
      <param name="Parameter">
        <param name="ParameterName" value="@log_level" />
        <param name="DbType" value="String" />
        <param name="Size" value="50" />
        <param name="Layout" type="HR.Class.Log.Layout.PatternLayout">
          <param name="ConversionPattern" value="%p" />
        </param>
      </param>
      <param name="Parameter">
        <param name="ParameterName" value="@logger" />
        <param name="DbType" value="String" />
        <param name="Size" value="255" />
        <param name="Layout" type="HR.Class.Log.Layout.PatternLayout">
          <param name="ConversionPattern" value="%c" />
        </param>
      </param>
      <param name="Parameter">
        <param name="ParameterName" value="@message" />
        <param name="DbType" value="String" />
        <param name="Size" value="4000" />
        <param name="Layout" type="HR.Class.Log.Layout.PatternLayout">
          <param name="ConversionPattern" value="%m" />
        </param>
      </param>
      <param name="Parameter">
        <param name="ParameterName" value="@exception" />
        <param name="DbType" value="String" />
        <param name="Size" value="2000" />
        <param name="Layout" type="HR.Class.Log.Layout.ExceptionLayout" />
      </param>
    </appender>


    <!--HRSMTPAppender:将日志发送邮件-->
	  <appender name="HRSMTPAppender" type="HR.Class.Log.Appender.SMTPAppender">
		  <authentication value="Basic" />
		  <To value="xzbwww@126.com"/>
		  <From value="it_fighter@163.com" />
		  <Subject value="财务数据审计分析系统:日志" />
		  <SmtpHost value="smtp.163.com" />
		  <Username value="it_fighter@163.com" />
		  <Password value="sgj13002945392" />
		  <param name="BufferSize" value="10" />
		  <param name="Lossy" value="true" />
		  <evaluator type="HR.Class.Log.Core.LevelEvaluator">
			  <param name="Threshold" value="Fatal" />
		  </evaluator>

		  <layout type="HR.Class.Log.Layout.PatternLayout">
			  <param name="ConversionPattern"  value="%newline%date [%thread] %-5level %logger [%property{NDC}] - %message%newline%newline%newline" />
		  </layout>
	  </appender>

    <!--LocalFileAppender:将日志写入本地文件-->
    <appender name="LocalFileAppender" type="HR.Class.Log.Appender.RollingFileAppender">
      <param name="File" value="System\SystemLog.Log" />
      <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="HR.Class.Log.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" />
      </layout>
    </appender>



    <root>
      <level value="ALL" />
      <appender-ref ref="HRAdoNet" />
      <appender-ref ref="HRSMTPAppender" />
      <appender-ref ref="LocalFileAppender" />
    </root>

  </HR.Class.Log>
</configuration>




Log4Net把日志保存到数据库和发Email的例子

通过Log4Net把日志保存到数据库和发送Email通知的例子,本例子运行在SQL SERVER上
1. 建立数据库的表和存储过程
 
CREATE TABLE [dbo].[LogTest] (

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

  [LogDate] [datetime] NOT NULL ,

  [LogThread] [varchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,

  [LogLevel] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,

  [Logger] [varchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,

  [LogMessage] [varchar] (4000) COLLATE Chinese_PRC_CI_AS NULL ,

  [LogException] [varchar] (2000) COLLATE Chinese_PRC_CI_AS NULL 

) ON [PRIMARY]

GO
 
CREATE PROCEDURE dbo.spLog_Create

 

 @log_date datetime, 

 @thread varchar(255), 

 @log_level varchar(50), 

 @logger varchar(255), 

 @message varchar(4000), 

 @exception varchar(2000)

 

as

 

INSERT INTO LogTest 

 (

 LogDate,

 LogThread,

 LogLevel,

 Logger,

 LogMessage,

 LogException

 ) 

 VALUES 

 (

 @log_date, 

 @thread, 

 @log_level, 

 @logger, 

 @message, 

 @exception

 )

GO
 
2. Log4Net的配置
在Web.Config或App.Config文件的内容
 
<?xml version="1.0" encoding="utf-8" ?>

<configuration>

    <configSections>

       <section name="Xipu.Com.Log" type="Xipu.Com.Log.Config.Xipu.Com.LogConfigurationSectionHandler,Xipu.Com.Log" />

    </configSections>

    <Xipu.Com.Log>

           <appender name="MyADO" type="Xipu.Com.Log.Appender.ADONetAppender">

               <param name="BufferSize" value="100" />

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

              <param name="ConnectionString" value="Server=localhost;Database=Test;User ID=sa;Password=sa;Trusted_Connection=False" />

              <param name="CommandType" value="StoredProcedure" />

              <param name="CommandText" value="spLog_Create" />

              <param name="Parameter">

                  <param name="ParameterName" value="@log_date" />

                  <param name="DbType" value="DateTime" />

                  <param name="Layout" type="Xipu.Com.Log.Layout.RawTimeStampLayout" />

              </param>

              <param name="Parameter">

                  <param name="ParameterName" value="@thread" />

                  <param name="DbType" value="String" />

                  <param name="Size" value="255" />

                  <param name="Layout" type="Xipu.Com.Log.Layout.PatternLayout">

                     <param name="ConversionPattern" value="%t" />

                  </param>

              </param>

              <param name="Parameter">

                  <param name="ParameterName" value="@log_level" />

                  <param name="DbType" value="String" />

                  <param name="Size" value="50" />

                  <param name="Layout" type="Xipu.Com.Log.Layout.PatternLayout">

                     <param name="ConversionPattern" value="%p" />

                  </param>

               </param>

              <param name="Parameter">

                  <param name="ParameterName" value="@logger" />

                  <param name="DbType" value="String" />

                  <param name="Size" value="255" />

                  <param name="Layout" type="Xipu.Com.Log.Layout.PatternLayout">

                     <param name="ConversionPattern" value="%c" />

                  </param>

              </param>

              <param name="Parameter">

                  <param name="ParameterName" value="@message" />

                  <param name="DbType" value="String" />

                  <param name="Size" value="4000" />

                  <param name="Layout" type="Xipu.Com.Log.Layout.PatternLayout">

                     <param name="ConversionPattern" value="%m" />

                  </param>

              </param>

              <param name="Parameter">

                  <param name="ParameterName" value="@exception" />

                  <param name="DbType" value="String" />

                  <param name="Size" value="2000" />

                  <param name="Layout" type="Xipu.Com.Log.Layout.ExceptionLayout" />

              </param>

           </appender>

           <appender name="SMTPAppender" type="Xipu.Com.Log.Appender.SMTPAppender">

              <BufferSize value="1" />

              <param name="To" value="dengzebo@163.com"/>

              <param name="From" value="dengzebo@cdce.cn" />

              <Subject value="Xipu.Com.Log Error Message" />

              <SMTPHost value="mail.cdce.cn" />

              <Username value="dengzebo" />

              <Password value="ILOVEYOU" />

              <param name="LocationInfo" value="false" />

              <param name="BufferSize" value="5" />

              <!--说明: "BufferSize"设置日志缓存,存储到512后一起一个Email发送,如不设此项,每记一个日志,发一条Email-->

              

              <!--  <param name="Lossy" value="true" /> 

               <evaluator type="Xipu.Com.Log.spi.LevelEvaluator">

               <param name="Threshold" value="WARN" />

               </evaluator> 

               -->

 

              <layout type="Xipu.Com.Log.Layout.PatternLayout">

                  <param name="ConversionPattern" value="%n%d [%t] %-5p %c [%x] - %m%n%n%n" />

              </layout>

           </appender>

           <root>

              <level value="ALL" />

              <appender-ref ref="MyADO" />

              <appender-ref ref="SMTPAppender" />

           </root>

 

 

    </Xipu.Com.Log>

</configuration>
 
3. 在AssemblyInfo.cs文件中加入以下行:
 
[assembly: Xipu.Com.Log.Config.XmlConfigurator(ConfigFile = "App.config", ConfigFileExtension = "config", Watch = true)]
 
4. 编写测试代码:
 
            Xipu.Com.Log.ILog log = Xipu.Com.Log.LogManager.GetLogger("MyLoggerTest");

            try

            {

                log.Info("这是hansong的LOG INFO测试!");

                log.Debug("这是hansong的LOG DEBUG测试!");

                throw new Exception("这是hansong的LOG ERROR测试!");

            }

            catch (Exception er)

            {

                log.Error("错误日志", er);

            }
 
5.其它文档资料


上述配置好后,即可封闭成组件。首先要在将要封闭成的组件中引用log4Net.dll文件
组件代码如下:

注意:要在这个封闭的项目下的AssemblyInfo.cs文件中加下:
 
[assembly:HR.Class.Log.Config.XmlConfigurator(ConfigFile="App.config",ConfigFileExtension="config",Watch=true)]




namespace HR.Class.Log.WriteLog
{
    /// <summary>
    /// 当出现错误时,必须指定日志的类型,一般应用于系统出现错误后,
    /// 如在Catch中用它,无论错误是普通的还是致命的
    /// </summary>
    public enum ErrorLogType
    {
        /// <summary>
        /// 致命的错误
        /// </summary>
        FatalLog,

        /// <summary>
        /// 错误的错误
        /// </summary>
        ErrorLog
    }


    /// <summary>
    /// 当需要提示时,必须指定日志的类型,一般应用于当系统提示用户怎样操作,
    /// 哪怕是警告类操作,都应该用此类型
    /// </summary>
    public enum NoramlLogType
    {
        /// <summary>
        /// 普通操作日志
        /// </summary>
        InfoLog,

        /// <summary>
        /// 警告日志
        /// </summary>
        WarnLog,

        /// <summary>
        /// 调试日志
        /// </summary>
        DebugLog
    }

    public static class WriteLog
    {

        public static void Write(string ModuleClassName, string FunctionName, string ErrorString, Exception Ex, HR.Class.Log.WriteLog.ErrorLogType LogType)
        {
            try
            {
                HR.Class.Log.ILog log = HR.Class.Log.LogManager.GetLogger("[" + ModuleClassName + "].[" + FunctionName + "]");
                if (LogType == HR.Class.Log.WriteLog.ErrorLogType.ErrorLog)
                {
                    log.Error(ErrorString, Ex);
                }
                else if (LogType == HR.Class.Log.WriteLog.ErrorLogType.FatalLog)
                {
                    log.Fatal(ErrorString, Ex);
                }
            }
            catch(Exception ET)
            {
                HR.Class.Log.ILog log = HR.Class.Log.LogManager.GetLogger("[HR.Class.Log.WriteLog].[Write]:ErrorLogType");
                log.Error("写入日志时出错" + "[" + ModuleClassName + "].[" + FunctionName + "]", ET);
            }
        }

        public static void Write(string ModuleClassName, string FunctionName, string Infostring, HR.Class.Log.WriteLog.NoramlLogType LogType)
        {
            try
            {
                HR.Class.Log.ILog log = HR.Class.Log.LogManager.GetLogger("[" + ModuleClassName + "].[" + FunctionName + "]");
                if (LogType == HR.Class.Log.WriteLog.NoramlLogType.InfoLog)
                {
                    log.Info(Infostring);
                }
                else if (LogType == HR.Class.Log.WriteLog.NoramlLogType.WarnLog)
                {
                    log.Warn(Infostring);
                }
                else if (LogType == HR.Class.Log.WriteLog.NoramlLogType.DebugLog)
                {
                    log.Debug(Infostring);
                }
            }
            catch (Exception ex)
            {
                HR.Class.Log.ILog log = HR.Class.Log.LogManager.GetLogger("[HR.Class.Log.WriteLog].[Write]:ErrorLogType");
                log.Error("写入日志时出错" + "[" + ModuleClassName + "].[" + FunctionName + "]", ex);
            }

        }
    }
  
}


分享到:
评论

相关推荐

    log4net。log4net

    log4net简介** log4net是Apache软件基金会的开源项目,基于Java平台的log4j移植而来,专门针对.NET Framework设计。它的设计目标是提供一个灵活且可扩展的日志记录框架,支持多种输出方式(如文件、控制台、数据库...

    log4net自动删除日志文件实现

    log4net简介** log4net是Apache软件基金会的项目,它为.NET平台提供了丰富的日志记录功能。log4net允许程序员定义日志输出的级别(如DEBUG、INFO、WARN、ERROR等),并可自定义日志的输出目的地,包括控制台、文件...

    log4net配置,日志纪录log4j的.NET版

    log4net简介** Log4net是一个开源的日志组件,支持多种日志输出方式,如控制台、文件、数据库等。它具有灵活的配置机制,可以根据不同环境和需求轻松调整日志级别、格式和输出目标。此外,log4net与.NET的集成使得...

    log4net的配置详解

    log4net简介 log4net是基于.NET的 logging API,它允许开发者定义多种日志输出级别(如DEBUG、INFO、WARN、ERROR、FATAL),并且可以将日志输出到不同的目标,如控制台、文件、数据库等。log4net的核心概念包括...

    log4net保存日志到MySql数据库

    log4net简介 Log4net是Apache软件基金会的开源项目,它是.NET平台上的一个强大的日志记录工具,提供灵活的日志配置,支持多种输出方式,如控制台、文件、数据库等。它具有性能高、可扩展性强、易于配置和使用等...

    C# 利用log4net 把日志写入到数据库

    **一、log4net简介** log4net是一款广泛使用的、高度可配置的日志框架,它为.NET开发者提供了一套灵活的日志记录解决方案。log4net支持多种输出目标,包括控制台、文件、事件查看器以及数据库等。它的优势在于其...

    log4net实例

    **一、log4net简介** log4net提供了一个可配置的、高性能的日志记录框架,支持多种日志输出方式,如控制台、文件、数据库、网络等。其核心理念是“设计模式”,使得日志记录可以根据项目的需要进行灵活配置,而不...

    log4net 配置 根据日期生成 文件 根据 分类 (INFO、ERROR) 生成文件

    #### 一、log4net简介 log4net是一个开放源代码的日志框架,用于.NET平台的应用程序。它基于Apache Logging Services的log4j项目,并进行了扩展和优化,使其更适应.NET环境。log4net提供了一种灵活的日志记录机制,...

    log4net_1.2.11

    **一、log4net简介** log4net是Apache软件基金会的顶级项目之一,它是一个开源的日志记录框架,广泛应用于.NET平台。该库提供了一个高度可配置的日志记录系统,适用于多种编程语言,包括C#、VB.NET等。它的名称原为...

    log4Net使用方法介绍

    **一、log4Net简介** log4Net是Apache软件基金会的Jakarta项目下的一个开源日志框架,适用于.NET Framework。它提供了强大的日志记录功能,支持多种输出方式,如控制台、文件、数据库等,且具有可配置性,能够帮助...

    Log4Net日志

    Log4Net简介** Log4Net是Apache软件基金会的开源项目,它提供了一种灵活且可扩展的日志记录机制,具有高性能、可配置性、易于集成等特点。Log4Net支持多种输出方式,如控制台、文件、数据库、SMTP邮件等,可以满足...

    log4net Asp.net mvc 配置

    #### 一、log4net简介 log4net是一款基于.NET平台的日志记录工具,它能够帮助开发者轻松地将日志信息写入磁盘文件以及发送电子邮件等。log4net是Apache Logging Services的一个组成部分,其设计灵感来源于log4j,...

    Log4Net配置步骤

    #### 一、Log4Net简介 Log4Net是Apache开源组织为.NET环境提供的一款日志记录工具,它基于Java的日志框架log4j开发而来,继承了log4j的强大功能与灵活性。Log4Net能够帮助开发者在.NET应用程序中方便地进行日志记录...

    log4net网站项目应用实例

    log4net简介 log4net是基于Java的log4j移植到.NET平台的,提供了灵活的日志记录配置,支持多种日志输出方式,如控制台、文件、数据库等。它的设计理念是简单易用,但功能强大,可以满足不同层次的调试和日志需求。...

    log4net的使用方法

    **log4net简介** log4net是Apache软件基金会的一个开源项目,它是一个强大的日志记录框架,广泛应用于.NET Framework的各个版本中。log4net提供了一种灵活且可配置的日志记录解决方案,允许开发者在应用程序中轻松...

    log4net 学习用例

    1. **log4net 简介** log4net 是基于 log4j(Java 平台的日志框架)设计的,它提供了丰富的日志记录级别(如 DEBUG、INFO、WARN、ERROR、FATAL),以及灵活的日志输出方式,包括控制台、文件、数据库、SMTP 邮件等...

    log4net日志输出

    log4net简介 `log4net`是Apache软件基金会的Jakarta项目的一部分,灵感来源于Java的log4j。它是.NET平台上一个强大的日志工具,支持多种日志目标,如控制台、文件、数据库等,并且具有丰富的日志级别,如DEBUG、...

    log4net文件及配置方法

    **log4net简介** log4net是Apache软件基金会的一个开源项目,它是一个强大的日志记录框架,广泛应用于.NET平台上的应用程序。它提供了灵活的日志记录配置,允许开发者将日志信息输出到各种目的地,如控制台、文件、...

    Log4net的使用

    **Log4net简介** Log4net是Apache软件基金会的开源项目,它是一个强大的日志记录框架,广泛应用于.NET平台,提供了灵活的日志记录方案。它支持多种日志目标(如控制台、文件、数据库等)和不同的日志级别(如DEBUG...

    log4net的使用例子

    **log4net简介** log4net是Apache组织提供的一款开源的日志记录框架,适用于.NET平台。它为应用程序提供了灵活的日志记录功能,可以方便地控制日志信息的输出级别、格式以及目标,使得开发者能够方便地进行调试和...

Global site tag (gtag.js) - Google Analytics