2010-09-10 82 views
0

我正在使用一些自定義SharePoint工作流程組件來處理項目,這些組件是我想要添加log4net的。log4net和Sharepoint 2007工作流程

我真的很努力讓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; 
    } 
} 

在我的web.config的SharePoint網站:

<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中顯示出一些調試條目,但我什麼都沒有。

任何想法我做錯了什麼?

謝謝!

回答

1

您需要配置至少一個記錄器。通常你會配置根記錄器。例如: -

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

如果不使其工作然而,我建議您配置跟蹤偵聽器將輸出log4net的內部調試消息。 (你已經有內部調試打開。)

+0

太棒了......謝謝Stefan。我對配置文件進行了相當廣泛的混淆,並沒有注意到我敲掉了節點!跟蹤也是一個很好的建議,並告訴我,無論服務ID Sharepoint正在運行,都無法使用EventLog。我已經改變它登錄到一個文件,現在它工作正常。 – NeilD 2010-09-10 10:19:39

0

而且記住,whenver工作流程進入睡眠狀態(序列化到數據庫)和醒來時,它繼續OWSTIMER.EXE進程中運行,你會NO MORE看任何日誌條目。這也適用於在事件接收器中寫入的日誌條目或由stsadm或除IIS工作進程之外的任何其他進程執行的方法。

,所以我會建議你:在12Hive/config目錄

  • 認沽log4net.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)] 

所以無論進程將使用我的程序集,它會被記錄(我會t是事件接收器,stsadm控制檯或SharePoint管理器 - 它們都被記錄)。

請參閱SharePoint and Log4Net的問題。