2009-04-03 2 views
28

Я пытаюсь использовать log4net для записи в журнал событий клиента в IIS7 в Windows Server 2008 с пакетом обновления 1 (SP1). Однако учетная запись, похоже, не имеет доступа к записи в журнал событий. У кого-нибудь есть предложения?Запись в журнал событий в ASP.NET в Windows Server 2008 IIS7

ответ

59

Проблема, вероятно, ваш источник событий. Вам необходимо создать источник событий, прежде чем вы сможете записать его в журнал событий (если нет, объект журнала событий пытается автоматически создать его для вас «автоматически» при первом входе в журнал).

Для создания источника журнала событий вам необходимо укрепить права доступа. В некоторых моих веб-приложениях я поставил код для создания источника события в мою настройку (настройка выполняется как администратор, поэтому я всегда гарантированно могу создать источник).

Вам просто нужно создать источник один раз. После этого ваше приложение ASP.Net должно иметь достаточные разрешения для записи записей с указанием источника (или источников), который вы создали.

Вы можете использовать EventLogInstaller в своей настройке для создания источника или просто написать небольшую утилиту для вызова EventLog.CreateEventSource() в качестве администратора.

Я покажу оба способа:

 

// You would do this one from within an Installer class in a setup: 
     private void InstallEventLog() 
     { 
      EventLogInstaller logInstaller; 

      //Create an instance of an EventLogInstaller. 
      logInstaller = new EventLogInstaller(); 

      //Set the source name of the event log. 
      logInstaller.Source = "TheEventSourceName"; 
      Installers.Add(logInstaller); 
     } 

 

Метод 2: просто позвоните CreateEventSource раза в качестве администратора (вы можете поместить следующий код в консольном приложение, например, и запустить приложение консоли как админ

 

EventLog.CreateEventSource("TheSourceName", "Application"); 
 

Бонус: Если Powershell установлен на вашем сервере, вы можете сделать это из командной строки Powershell: (Убедитесь, что вы работаете в Powershell в качестве администратора)

 

[system.Diagnostics.EventLog]::CreateEventSource("SourceName", "Application") 
 

Hop, который помогает

+6

+1, я сделал это в режиме powershell. Это было замечательно. –

15

Дайте разрешение ASPNET журналу событий.

Выполнить -> Regedit -> Просмотр в

HKEY_LOCAL_MACHINE 
    \SYSTEM 
     \CurrentControlSet 
     \Services 
      \Eventlog 

правой кнопкой мыши выберите разрешения и дать ASPNET счета полный контроль

+3

Это, вероятно, плохая идея, если вы распространяете свое приложение, есть администраторы ИТ, которые не смогут изменять параметры безопасности по умолчанию. Вы должны иметь возможность играть в песочнице. –

+7

Не уверен, почему это так сильно проголосовало. Он может не масштабироваться или даже быть приемлемым для производства, но это хороший ответ, в котором конкретно говорится, что такое разрешение, и как его подавать. –

+2

+1 Потому что ответ на самом деле полезен и не заслуживает того, чтобы быть в -2 ... –

2

Я думаю, что более безопасный вариант хороший пример @Michael Kniskern является:

смерзаться ...

HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Eventlog \ your_new_application_log

Дайте полный контроль только для конкретного журнала приложений, созданного для целей вашего приложения (в этом примере щелкните правой кнопкой мыши ваш_new_application_log и установите для него разрешения). После создания нового имени журнала он появится в реестре, вложенном в узел журнала событий, как указано выше.

7

IIS 8 Разрешение решения ответ

Я ленив и не создать специальный журнал в моем коде, вместо этого я использовал:

System.Diagnostics.EventLog.WriteEntry("MyAppName", "Bla Bla SQL ERROR: "+sx.Message);

Просто, чтобы завершить ответ Майкла В IIS8 пользователь использовал IIS при запуске кода на стороне сервера: IIS_IUSRS

(на самом деле это более сложно, поскольку в IIS_IUSRS есть виртуальные учетные записи, но они получают разрешения от этой учетной записи, см. форму IIS_IUSRS and IUSR permissions in IIS8).

Этот пользователь требует только разрешение на чтение этого узла реестра:

HKLM\CurrentControlSet\System\Services\Eventlog\Security

Причина этого заключается в том, что, когда новый источник журнала записывается, прежде чем создавать его, система хочет, чтобы проверить, что она Безразлично» t, поэтому ему необходимо ПРОЧТИТЬ имена источников.

Кроме того, если вы используете iis express визуальной студии, он будет работать под вашими личными учетными данными, поэтому, если у вас нет прав доступа на чтение к узлу реестра выше, вам нужно будет добавить его также при отладке в визуальная студия.

(Если администраторы имеют разрешение на узел, а ваши находятся в этой группе, этого недостаточно, вам нужно запустить визуальную студию «как администратор», которая будет работать только с ярлыка визуальной студии, а не с помощью sln-ярлыка)

Другое примечание. Если компьютер находится в домене и вы не можете найти учетную запись IIS_IUSRS при редактировании разрешений реестра, скорее всего, вы ищете неправильное «местоположение», вместо этого найдите учетную запись в активном каталоге домена локального компьютера)

+0

Обратите внимание, что если в списке отсутствует пользователь IIS_IUSRS, возможно, вы просматриваете пользователей домена - измените местоположения на локальный компьютер. пользователь IUSRS в домене не тот, который вам нужен – thedrs

+0

Также не забудьте перезапустить службу (IIS) – thedrs

+0

Если она по-прежнему не работает, перейдите в свойства вашего пула приложений, выберите дополнительные параметры, затем отметьте «Разрешить 32-разрядные приложения» правда. Моя была ложной, но это помогло другу, так что попробуйте. – thedrs

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