2010-09-10 3 views
0

Я работаю над проектом с некоторыми пользовательскими компонентами рабочего процесса Sharepoint, к которым я бы хотел добавить log4net.log4net и Sharepoint 2007 Workflow

Я действительно пытаюсь получить 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

Awesome ... Спасибо Stefan. Я довольно много перепутал с конфигурационным файлом и не заметил, что я сбил узел ! Трассировка также была хорошим предложением и показала, что независимо от того, что работает служба Sharepoint Share, у нее нет доступа к использованию EventLog. Я изменил его для записи в файл, и теперь он работает правильно. – NeilD

0

Также имейте в виду, что whenver рабочий процесс переходит в спящий режим (сериализовать в базу данных) и просыпается, он продолжает работать в процессе owstimer.exe, и вы будете NO MORE см любые записи в журнале. Это также относится к записям журнала, записанным в приемнике событий или методам, выполняемым stsadm или любым другим процессом, чем рабочий процесс IIS.

Так я бы порекомендовал вам:

  • Пут log4net.config в каталоге 12Hive/CONFIG
  • Put 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 вопрос.

Смежные вопросы