log4net和Sharepoint 2007工作流程

时间:2010-09-10 09:45:04

标签: sharepoint-2007 workflow log4net

我正在开发一个带有一些自定义Sharepoint Workflow组件的项目,我想将log4net添加到。

我真的很难让log4net输出任何东西!

这是我目前的设置:

在我的工作流程的代码隐藏中:

private ILog log;

public MessageQueueWorkflow()
{
    InitializeComponent();

    string filepath = ConfigurationManager.AppSettings["log4netConfigPath"];
    if (!string.IsNullOrEmpty(filepath))
    {
        log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(filepath));
        log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
    }

}

public Guid workflowId = default(System.Guid);
public SPWorkflowActivationProperties workflowProperties = new SPWorkflowActivationProperties();

private void onWorkflowActivated1_Invoked(object sender, ExternalDataEventArgs e)
{
    try
    {
        #region Logging
        if (log.IsDebugEnabled)
        {
            log.Debug(System.Reflection.MethodInfo.GetCurrentMethod().Name);
        }
        #endregion Logging

        // do some stuff
    }
    catch (Exception ex)
    {
        if (log.IsErrorEnabled)
        {
            log.Error("An error has occurred.", ex);
        }

        throw ex;
    }
}

在我的Sharepoint网站的web.config中:

<appSettings>
    <add key="log4netConfigPath" value="C:\Inetpub\wwwroot\wss\VirtualDirectories\80\log4net.config"/>
</appSettings>

在我的log4net.config文件中:

<log4net debug="true">
  <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender" >
    <applicationName value="MyApp" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%d %-5p %c - %m%n" />
    </layout>
  </appender>
</log4net>

现在,当我运行这个工作流程时,我希望看到一些调试条目出现在EventViewer中,但我什么都没得到。

任何想法我做错了什么?

谢谢!

2 个答案:

答案 0 :(得分:1)

您需要配置至少一个记录器。通常您会配置根记录器。 E.g:

<log4net>
   ...
   <root>
       <level value="ALL" />
      <appender-ref ref="EventLogAppender" />     
   </root>
</log4net>

如果还没有使它工作,我建议您配置一个跟踪侦听器,它将输出log4net内部调试消息。 (您已经打开了内部调试。)

答案 1 :(得分:0)

还要记住,当工作流进入休眠状态(序列化到数据库)并唤醒时,它将继续在OWSTIMER.EXE进程中运行,您将没有更多查看任何日志条目。这也适用于使用事件接收器编写的日志条目或由stsadm或IIS工作进程以外的任何其他进程执行的方法。

所以我建议你:

  • 将log4net.config放入12Hive / CONFIG目录
  • 将log4net.dll放入GAC

然后我更喜欢把它放在我的AssemblyInfo.cs中:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = 
    @"C:\Program Files\Common Files\Microsoft Shared\" + 
    @"Web Server Extensions\12\CONFIG\log4net.config", Watch = true)]

因此无论进程将使用我的程序集,它都会被记录(它是事件接收器,stsadm控制台还是SharePoint管理器 - 它都会被记录)。

请参阅SharePoint and Log4Net问题。