深入浅出SharePoint——Log4net应用

使用强大的开源日志库Log4net来处理应用程序的日志信息,记录错误,警告,信息。

1 下载Log4net,在项目中引用log4net.dll

2 在AssemblyInfo.cs中添加以下代码

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)] 

3 添加cs文件

public static class Log4netUtil
    {
        private static ILog GetLog()
        {
            ILog log = null;
            try
            {
                StackTrace stack = new StackTrace();
                MethodBase method = stack.GetFrame(8).GetMethod();
                string methodName = method.DeclaringType.Namespace + "." 
                                  + method.DeclaringType.Name + "." 
                                  + method.ToString().Substring(method.ToString().IndexOf(" ") + 1);                
                log = LogManager.GetLogger(methodName);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return log;
        }

        /// <summary>
        /// Fatals log
        /// </summary>
        /// <param name="pMethod">method</param>
        /// <param name="pMessage">message</param>
        public static void Fatal(string pMessage)
        {
            SPSecurity.RunWithElevatedPrivileges(delegate() 
            {
                ILog log = Log4netUtil.GetLog();
                if (log.IsFatalEnabled)
                {
                    log.Fatal(pMessage);
                    //SPListLog.Log.Fatal(pMessage);
                } 
            });
        }

        /// <summary>
        /// Erros log
        /// </summary>
        /// <param name="pMethod">method.</param>
        /// <param name="pMessage">message.</param>
        public static void Error(string pMessage)
        {
            SPSecurity.RunWithElevatedPrivileges(delegate()
            {
                ILog log = Log4netUtil.GetLog();
                if (log.IsErrorEnabled)
                {
                    log.Error(pMessage);
                    //SPListLog.Log.Error(pMessage);
                }
            });
        }

        /// <summary>
        /// Warning log
        /// </summary>
        /// <param name="pMethod">method.</param>
        /// <param name="pMessage">message.</param>
        public static void Warn(string pMessage)
        {
            SPSecurity.RunWithElevatedPrivileges(delegate()
            {
                ILog log = Log4netUtil.GetLog();
                if (log.IsWarnEnabled)
                {
                    log.Warn(pMessage);
                    //SPListLog.Log.Warn(pMessage);
                }
            });
        }

        /// <summary>
        /// Information log
        /// </summary>
        /// <param name="pMethod">method.</param>
        /// <param name="pMessage">message.</param>
        public static void Info(string pMessage)
        {
            SPSecurity.RunWithElevatedPrivileges(delegate()
            {
                ILog log = Log4netUtil.GetLog();
                if (log.IsInfoEnabled)
                {
                    log.Info(pMessage);
                    //SPListLog.Log.Info(pMessage);
                }
            });
        }

        /// <summary>
        /// Debugging log
        /// </summary>
        /// <param name="pMethod">method.</param>
        /// <param name="pMessage">message.</param>
        public static void Debug(string pMessage)
        {
            SPSecurity.RunWithElevatedPrivileges(delegate()
            {
                ILog log = Log4netUtil.GetLog();
                if (log.IsDebugEnabled)
                {
                    log.Debug(pMessage);
                    //SPListLog.Log.Debug(pMessage);
                }
            });
        }
    }

4 添加log4net.config文件,其内容如下

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <!--log configuration-->
  <configSections>
      <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
  </configSections>
  <!--site log configuraiton-->
  <log4net>
    <root>
      <!-- Level: OFF, FATAL, ERROR, WARN, INFO, DEBUG, ALL -->
      <priority value="ALL"/>
      <appender-ref ref="RollingFileAppender"/>
    </root>
    <appender name="TraceAppender" type="log4net.Appender.TraceAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date %-5level %logger %message%newline"/>
      </layout>
    </appender>
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date %-5level %logger %message%newline"/>
      </layout>
    </appender>
    <appender name="BufferingForwardingAppender" type="log4net.Appender.BufferingForwardingAppender" >
      <bufferSize value="5" />
      <lossy value="true" />
      <evaluator type="log4net.Core.LevelEvaluator">
        <threshold value="WARN"/>
      </evaluator>
      <appender-ref ref="ConsoleAppender" />
    </appender>
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="Log\\"/>
      <appendToFile value="true"/>
      <rollingStyle value="Composite" />
      <datePattern value="yyyyMMdd&quot;_log.txt&quot;" />
      <maxSizeRollBackups value="10" />
      <maximumFileSize value="50MB" />
      <staticLogFileName value="false"/>
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date %-5level %logger %message%newline"/>
      </layout>
    </appender>
  </log4net>
</configuration>

5 使用log4net,日志将被记录在bin\log文件夹下。

posted @ 2012-12-11 14:53  风影极光  阅读(302)  评论(0编辑  收藏  举报