Рабочий процесс log4net и Sharepoint 2007 - PullRequest
0 голосов
/ 10 сентября 2010

Я работаю над проектом с некоторыми пользовательскими компонентами рабочего процесса Sharepoint, к которым я хотел бы добавить 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;
    }
}

В моем 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, но я ничего не получаю.

Есть идеи, что я делаю не так?

Спасибо!

Ответы [ 2 ]

1 голос
/ 10 сентября 2010

Вам необходимо настроить хотя бы один регистратор. Обычно вы настраиваете корневой логгер. E.g.:

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

Если это пока не помогает, я рекомендую настроить прослушиватель трассировки, который будет выводить сообщения внутренней отладки log4net. (У вас уже включена внутренняя отладка.)

0 голосов
/ 10 сентября 2010

Также имейте в виду, что всякий раз, когда рабочий процесс переходит в спящий режим (сериализуется в базу данных) и активируется, он продолжает работать в процессе 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 Manager - все будет зарегистрировано).

См. SharePoint и Log4Net вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...