Log4Net日志组件使用

 

概要:LogNet是一套开源的程序日志记录系统,经过配置后可以自动抓取程序中的错误、异常信息,并写入磁盘,也可以在异常发生时执行其他指定的操作

新建一个类库:Logger,封装一个LogHelper.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace myOracle.Logger
{
    using log4net;
   
        public class LogHelper
        {
            static LogHelper()
            {
                //在第一次使用此类的时候加载配置文件
                SetConfig();
            }

            public static readonly log4net.ILog logError = log4net.LogManager.GetLogger("logerror");
            public static readonly log4net.ILog logInfo = log4net.LogManager.GetLogger("logInfo");
            /// <summary>
            /// 默认配置。按配置文件
            /// </summary>
            public static void SetConfig()
            {
                log4net.Config.XmlConfigurator.Configure();
            }

            /// <summary>
            /// 写信息。
            /// </summary>
            /// <param name="info"></param>
            public static void WriteInfoLog(string info)
            {
                if (logInfo.IsInfoEnabled)
                {
                    logInfo.Info(info);
                }
            }

            /// <summary>
            /// 写异常。
            /// </summary>
            /// <param name="info"></param>
            public static void WriteErrorLog(string errLog)
            {
                if (logError.IsErrorEnabled)
                {
                    logError.Error(errLog);
                }
            }

            /// <summary>
            /// 写警告。
            /// </summary>
            /// <param name="info"></param>
            public static void WriteWarnLog(string warnLog)
            {
                if (logError.IsWarnEnabled)
                {
                    logError.Warn(warnLog);
                }
            }


              /// <summary>
              /// 写日志。出错时会写入
              /// </summary>
              /// <param name="info"></param>
              /// <param name="se"></param>
              public static void WriteErrorLog(string info, Exception se)
              {
                  if (logError.IsErrorEnabled)
                  {
                      logError.Error(info, se);
                  }
              }
        }
    
}

在我们的UI层中的webconfig配置文件中进行配置:

<?xml version="1.0" encoding="utf-8"?>

<!--
  有关如何配置 ASP.NET 应用程序的详细信息,请访问
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->

<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
  </configSections>
  <log4net>
    <!--错误日志配置-->
    <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
      <!--设置文本日志将来是写到网站更目录下的Log\\LogError\\文件夹中,如果没有自动创建-->
      <param name="File" value="Log\\LogError\\"/>
      <!--以追加的方式将后面日志写入到日志文件中-->
      <param name="AppendToFile" value="true"/>
      <!--表示日志文件到达上限值时备份-->
      <param name="MaxSizeRollBackups" value="1000"/>
      <!--表示一个日志文件最大只能写入10M的数据-->
      <param name="MaxFileSize" value="10240"/>
      <!--false:表示日志文件按照一定的规则来生成文件名称,true:表示日志文件名称永远都不会改变-->
      <param name="StaticLogFileName" value="false"/>
      <!--表示日志文件的文件名称以yyyyMMdd-->
      <param name="DatePattern" value="yyyyMMdd"/>
      <param name="RollingStyle" value="Date"/>
      <layout type="log4net.Layout.PatternLayout">
        <!--表示日志文件中的内容输出格式-->
        <param name="ConversionPattern" value="%n异常时间:%d [%t] %n异常级别:%-5p %n异 常 类:%c [%x] %n%m %n "/>
      </layout>
    </appender>
    <!--信息日志配置-->
    <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
      <param name="File" value="Log\\LogInfo\\"/>
      <!--文件路径-->
      <param name="AppendToFile" value="true"/>
      <param name="MaxFileSize" value="10240"/>
      <param name="MaxSizeRollBackups" value="100"/>
      <param name="StaticLogFileName" value="false"/>
      <param name="DatePattern" value="yyyyMMdd"/>
      <param name="RollingStyle" value="Date"/>
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%n日志时间:%d [%t] %n日志级别:%-5p %n日 志 类:%c [%x] %n%m %n"/>
      </layout>
    </appender>
    <!--控制台-->
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%5level [%thread] (%file:%line) - %message%newline"/>
      </layout>
    </appender>
    <logger name="logerror">
      <level value="ERROR"/>
      <appender-ref ref="ErrorAppender"/>
    </logger>
    <logger name="logInfo">
      <!--ALL:写错误,警告,信息三种类型的日志,-->
      <level value="INFO"/>
      <appender-ref ref="InfoAppender"/>
    </logger>
  </log4net>
  <connectionStrings>
    <add name="connString" connectionString="Data Source=127.0.0.1/orcl;Persist Security Info=True;User ID=SCOTT;Password=677714"/>
  </connectionStrings>
  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
  </system.web>

</configuration>

在我们的全局配置文件中进行一个简单的测试:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.SessionState;

namespace myOracle.UI
{
    using myOracle.Logger;
    public class Global : System.Web.HttpApplication
    {

        protected void Application_Start(object sender, EventArgs e)
        {
            //若不想把lognet配置文件写在web.config中,也可以另外手动指定。
           //XmlConfigurator.Configure(new FileInfo(HttpContext.Current.Server.MapPath("~/App_Data/log4net.config")));
            LogHelper.WriteInfoLog("测试信息日志");
        }

        protected void Session_Start(object sender, EventArgs e)
        {

        }

        protected void Application_BeginRequest(object sender, EventArgs e)
        {

        }

        protected void Application_AuthenticateRequest(object sender, EventArgs e)
        {

        }

        protected void Application_Error(object sender, EventArgs e)
        {
            Exception objExp = HttpContext.Current.Server.GetLastError();
           LogHelper.WriteErrorLog("\r\n客户机IP:" + Request.UserHostAddress 
               + "\r\n错误地址:" + Request.Url 
               + "\r\n异常信息:" + Server.GetLastError().Message, objExp);
        }

        protected void Session_End(object sender, EventArgs e)
        {

        }

        protected void Application_End(object sender, EventArgs e)
        {

        }
    }
}


在我们网站的根目录下会自动生成Log文件下的以日期的名称的日志文本文件:

 

 

本文仅用于学习!

END!

 

posted on 2015-09-11 15:06  巴夫巴夫  阅读(219)  评论(0编辑  收藏  举报