Запись в журнал событий в ASP.NET на Windows Server 2008 IIS7

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

Ответ 1

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

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

Вам просто нужно создать источник один раз. После этого ваше приложение 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 один раз в качестве администратора (например, вы можете поместить следующий код в консольное приложение и запустить консольное приложение как admin


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

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


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

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

Ответ 2

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

Выполнить → regedit → Обзор

HKEY_LOCAL_MACHINE
   \SYSTEM
      \CurrentControlSet
         \Services
            \Eventlog

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

Ответ 3

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

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

System.Diagnostics.EventLog.WriteEntry( "MyAppName", "Bla Bla SQL ОШИБКА:" + sx.Message);

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

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

Для этого пользователя требуется только разрешение READ для этого реестра node:

HKLM\CurrentControlSet\System\Services\Eventlog\Security

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

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

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

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

Ответ 4

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

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

HKEY_LOCAL_MACHINE  \ SYSTEM     \ CurrentControlSet        \Сервисы           \Журнал событий                \ Your_new_application_log

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

Ответ 5

Я использую IIS 10 и устанавливаю идентификатор пула в локальную систему

см. ссылку: fooobar.com/info/37014/...