首页 > 代码库 > SharePoint使用Log4Net

SharePoint使用Log4Net

      日志记录往往是软件开发周期中的重要组成部分。它具有以下几个优点:它可以提供应用程序运行时的精确环境,可供开发人员尽快找到应用程序中的Bug;一旦在程序中加入了Log 输出代码,程序运行过程中就能生成并输出日志信息而无需人工干预。另外,日志信息可以输出到不同的地方(控制台,文件等)以备以后研究之用。

Log4net就是为这样一个目的设计的,用于.NET开发环境的日志记录包.

Log4net可以配置在application所在的.config文件中,也可以在单独配置在一个.config文件中。

传统的Asp.net程序都会有一个web.config,我们可以把log4net的配置写在web.config中。

  • 在configuration节点下的configSections中添加对log4net的引用
  <configSections>    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />  </configSections>
  • 添加具体的log4net日志信息
<log4net>    <logger name="logerror">      <level value=http://www.mamicode.com/"ERROR" />      <appender-ref ref="ErrorAppender" />    </logger>    <logger name="loginfo">      <level value=http://www.mamicode.com/"INFO" />      <appender-ref ref="InfoAppender" />    </logger>    <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">      <param name="File" value=http://www.mamicode.com/"ErrorLog.log" />      <param name="AppendToFile" value=http://www.mamicode.com/"true" />      <param name="MaxSizeRollBackups" value=http://www.mamicode.com/"100" />      <param name="MaximumFileSize" value=http://www.mamicode.com/"1MB" />      <param name="RollingStyle" value=http://www.mamicode.com/"Size" />      <param name="StaticLogFileName" value=http://www.mamicode.com/"true" />      <layout type="log4net.Layout.PatternLayout">        <param name="ConversionPattern" value=http://www.mamicode.com/"%-5p %d [%c] %m%n" />      </layout>    </appender>    <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">      <param name="File" value=http://www.mamicode.com/"InfoLog.log" />      <param name="AppendToFile" value=http://www.mamicode.com/"true" />      <param name="MaxSizeRollBackups" value=http://www.mamicode.com/"100" />      <param name="MaximumFileSize" value=http://www.mamicode.com/"1MB" />      <param name="RollingStyle" value=http://www.mamicode.com/"Size" />      <param name="StaticLogFileName" value=http://www.mamicode.com/"true" />      <layout type="log4net.Layout.PatternLayout">        <param name="ConversionPattern" value=http://www.mamicode.com/"%-5p %d [%c] %m%n" />      </layout>    </appender>  </log4net>

备注:上面的代码分别定义了记录Info和Error的Appender,可以满足大部分需求

Sharepoint由于它的特殊性,用户是不能随便改config文件,sharepoint都是以farm的方式安装部署的,也就是说会有多台WFE,如果每台都去改config是及其不合理的。

Log4net的灵活在于你可以定义一个单独的config文件,也就是说我们无需去改web.config。

  • 新建一个log4net.config文件,内容跟上面的一样
<log4net debug="true">  <logger name="logerror">    <level value=http://www.mamicode.com/"ERROR" />    <appender-ref ref="ErrorRollingLogFileAppender" />  </logger>  <logger name="loginfo">    <level value=http://www.mamicode.com/"INFO" />    <appender-ref ref="RollingFileAppender" />  </logger>  <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">    <file type="log4net.Util.PatternString" value=http://www.mamicode.com/"C:\\Log\\%date{yyyyMMdd}-log.txt" />    <appendToFile value=http://www.mamicode.com/"true" />    <rollingStyle value=http://www.mamicode.com/"Size" />    <maxSizeRollBackups value=http://www.mamicode.com/"20" />    <maximumFileSize value=http://www.mamicode.com/"5MB" />    <staticLogFileName value=http://www.mamicode.com/"true" />    <layout type="log4net.Layout.PatternLayout">      <conversionPattern value=http://www.mamicode.com/"%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />    </layout>  </appender>  <appender name="ErrorRollingLogFileAppender" type="log4net.Appender.RollingFileAppender">    <file type="log4net.Util.PatternString" value=http://www.mamicode.com/"C:\\Log\\%date{yyyyMMdd}-error.txt" />    <appendToFile value=http://www.mamicode.com/"true" />    <rollingStyle value=http://www.mamicode.com/"Date" />    <datePattern value=http://www.mamicode.com/"yyyyMMdd" />    <layout type="log4net.Layout.PatternLayout">      <conversionPattern value=http://www.mamicode.com/"%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />    </layout>  </appender></log4net>

 备注:这里我们指定了日志的目录,如果没有指定,默认与application目录一致

  • 定义LogHelper公用类
public class LogHelper    {        //log4net日志专用        public static readonly log4net.ILog loginfo = log4net.LogManager.GetLogger("loginfo");        public static readonly log4net.ILog logerror = log4net.LogManager.GetLogger("logerror");               /// <summary>        /// 普通的文件记录日志        /// </summary>        /// <param name="info"></param>        public static void WriteLog(string info)        {            if (loginfo.IsInfoEnabled)            {                loginfo.Info(info);            }        }        /// <summary>        /// 错误日志        /// </summary>        /// <param name="info"></param>        /// <param name="se"></param>        public static void WriteLog(string info, Exception se)        {            if (logerror.IsErrorEnabled)            {                logerror.Error(info, se);            }        }    }
  • 关联配置文件

Log4net提供log4net.Config.XmlConifguratorAttribute自定义属性,我们可以通过它来关联配置文件

//监视默认的配置文件,AppName.exe.config  [assembly: log4net.Config.XmlConfigurator(Watch = true)]//监视配置文件,AppName.exe.log4net  [assembly: log4net.Config.XmlConfigurator(ConfigFileExtension = "log4net", Watch = true)]//使用配置文件log4net.config,不监视改变。[assembly: log4net.Config.XmlConfigurator(ConfigFile = "C:\\Log4net\\log4net.config")]

根据实际情况选择合适的配置方式,前面讲了sharepoint的特殊性,不是很方便去更改web.config,所以我们选择第三种配置,即关联一个外部的.config文件。

在项目部署的时候,只要把log4net.config部署到指定的目录即可。完整的LogHelper代码如下

//使用配置文件log4net.config,不监视改变。[assembly: log4net.Config.XmlConfigurator(ConfigFile = "C:\\Log4net\\log4net.config")]namespace CommonService{    public class LogHelper    {        //log4net日志专用        public static readonly log4net.ILog loginfo = log4net.LogManager.GetLogger("loginfo");        public static readonly log4net.ILog logerror = log4net.LogManager.GetLogger("logerror");              /// <summary>        /// 普通的文件记录日志        /// </summary>        /// <param name="info"></param>        public static void WriteLog(string info)        {            if (loginfo.IsInfoEnabled)            {                loginfo.Info(info);            }        }        /// <summary>        /// 错误日志        /// </summary>        /// <param name="info"></param>        /// <param name="se"></param>        public static void WriteLog(string info, Exception se)        {            if (logerror.IsErrorEnabled)            {                logerror.Error(info, se);            }        }    }}
  • 使用Log功能
LogHelper.WriteLog("The Process completed.");LogHelper.WriteLog("Error testing", new Exception("just for testing"));

 

log4net的强大远不止这些,本文只是针对项目开发中惯用的配置来做讲解,尤其是如果配置在sharepoint中使用。

 

SharePoint使用Log4Net