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="ERROR" />
      <appender-ref ref="ErrorAppender" />
    </logger>
    <logger name="loginfo">
      <level value="INFO" />
      <appender-ref ref="InfoAppender" />
    </logger>
    <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
      <param name="File" value="ErrorLog.log" />
      <param name="AppendToFile" value="true" />
      <param name="MaxSizeRollBackups" value="100" />
      <param name="MaximumFileSize" value="1MB" />
      <param name="RollingStyle" value="Size" />
      <param name="StaticLogFileName" value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%-5p %d [%c] %m%n" />
      </layout>
    </appender>
    <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
      <param name="File" value="InfoLog.log" />
      <param name="AppendToFile" value="true" />
      <param name="MaxSizeRollBackups" value="100" />
      <param name="MaximumFileSize" value="1MB" />
      <param name="RollingStyle" value="Size" />
      <param name="StaticLogFileName" value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%-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="ERROR" />
    <appender-ref ref="ErrorRollingLogFileAppender" />
  </logger>
  <logger name="loginfo">
    <level value="INFO" />
    <appender-ref ref="RollingFileAppender" />
  </logger>
  <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
    <file type="log4net.Util.PatternString" value="C:\\Log\\%date{yyyyMMdd}-log.txt" />
    <appendToFile value="true" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="20" />
    <maximumFileSize value="5MB" />
    <staticLogFileName value="true" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
  </appender>
  <appender name="ErrorRollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
    <file type="log4net.Util.PatternString" value="C:\\Log\\%date{yyyyMMdd}-error.txt" />
    <appendToFile value="true" />
    <rollingStyle value="Date" />
    <datePattern value="yyyyMMdd" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%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中使用。

时间: 2024-10-09 21:46:24

SharePoint使用Log4Net的相关文章

log4net修改数据库连接字符串和写自定义信息

最近项目需要用log4net来写日志,因为整个平台式在sharepoint上,我们需要记录具体是哪个子站点发生的日志,因此需要再原来的log表里面添加一个自定义信息列.由于平台的安全性要求,我们需要对连接字符串加密.连接字符串的信息是在AdoNetAppender读取的,所以我们要扩展该类.而自定义消息我们需要扩展PatternLayout类.其实有关log4net的介绍网上已经很多了,如log4net.dll使用 具体的代码如下: #region Log helper public class

SharePoint 2010 数据库xxx的事务日志已满

http://www.cnblogs.com/sygwin/p/6222428.html 接到领导安排,说客户有问题 请求协助解决,对方给我展示的错误日志,如下: 数据库'WSS_Content_xxxx'的事务日志已满.若要查明无法重用日志中的空间的原因,请参阅sy.databases中的log_reuse_wait_dec列 导致的结果是用户再也无法上传文件到文档库了. 看来一下对应的数据库文件,日志文件大的惊人,已经超过1.8T 作为老司机,理论上解决这样的问题,就是收缩数据库.可是咱是个

SharePoint 2010/SharePoint 2013 Custom Action: 基于Site Collection 滚动文字的通知.

应用场景: 有时候我们的站点需要在每个页面实现滚动文字的通知,怎么在不修改Master Page的情况下实现这个功能?我们可以使用Javascript 和 Custom Action 来实现. 创建一个Custom Action.主要使用到 Location = 'ScriptLink' 属性, 该属性可以动态的加载JavaScript 文件链接和代码块到模板页.代码如下: <Elements xmlns="http://schemas.microsoft.com/sharepoint/&

SharePoint 2013 日历视图兼容性问题

在IE11上访问SharePoint 2013 calendar视图,发现加入兼容性视图以后访问,正常,如下图: 不加入兼容性视图IE11访问,出现兼容性问题,如下图: 因为有些环境有问题,有些环境没有问题,对比了一下,发现打补丁kb3054792,打完补丁,重启即可: 补丁地址:http://www.microsoft.com/zh-cn/download/details.aspx?id=47055 特别的,在解决这个问题之前的疯狂谷歌过程中,发现也有类似情况,要么加入兼容性视图,要么开启浏览

微软职位内部推荐-Senior Development Lead – Sharepoint

微软近期Open的职位: SharePoint is a multi-billion dollar enterprise business that has grown from an on-premises product that IT admins love into a core part of the Office 365 service today. Over the last several years, the SharePoint team has invested heavi

SharePoint Online 创建门户网站系列之图片滚动

?? 前 言 创建SharePoint Online栏目我们之前已经介绍过了,具体就是内容编辑器方式.自带WebPart方式和JavaScript读取后台数据前台做展示的三种: 但是,对于复杂的展示来说,这些方式还是会比较难以实现,虽然对于首页的图片轮播来说,通过JavaScript方式已经完全能够胜任,但是,我还是想通过这个栏目,为大家介绍如何使用沙盒解决方案创建WebPart,来完成更加复杂的前台展示. 下面,让我们开始在SharePoint Online的门户网站中创建沙盒解决方案吧 .

SharePoint Workflow架构(一)SharePoint 和Workflow Runtime的结合

[译者按]Andy Li这篇文章,是我看过的最好的,最透彻的关于SharePoint Workflow架构的文章.通过阅读他的文章,我才清楚的了解了SharePoint Workflow的运作机制,并且在遇到问题的时候,知道如何下手查找问题.因此翻译过来,希望对Workflow的开发人员有帮助. 这篇博客是由Andy Li贡献的,他是SharePoint开发人员支持组的处理疑难问题的工程师.原文地址.这个关于Workflow的系列,是他贡献给社区的,帮助大家更好的理解Workflow运行时的内部

Sharepoint多站点通过apache进行多域名访问

由于公司购买了windows azure服务,想把本地的两台sharepoint server放在windows azure上,为了节省成本,想把两台sharepoint服务放在一台机器上,前提是之前的访问方式不变:了解需求后,就在网上找案例,最终无果.最后想到了通过apache进行跳转也行.我的想法是.将其中一台sharepoint服务作为一个子站点来部署,然后通过权限控制.最后通过apache进行跳转,这样也能达到效果.经过多次折腾终于实现了.所以在此分享给有需要的朋友. 我们都知道Shar

SharePoint 2013 SPDistributedCacheService 介绍与配置

SharePoint 2013 SPDistributedCacheService 是SharePoint  server 2013引入的一种缓存机制,它通常用于以下功能的缓存: Newsfeeds Authentication OneNote client access Security Trimming Page load performance (直接影响页面加载和反应速度) 有些Cache 是不通过SPDistributedCacheService 缓存的,例如: Blob Cache