Запись в журнал событий в ASP.NET на Windows Server 2008 IIS7 - PullRequest
28 голосов
/ 03 апреля 2009

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

Ответы [ 4 ]

63 голосов
/ 22 апреля 2009

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

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

Вам просто нужно создать источник один раз. После этого ваше приложение 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")

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

15 голосов
/ 03 апреля 2009

Предоставление разрешения ASPNET журналу событий.

Выполнить -> regedit -> Просмотреть

HKEY_LOCAL_MACHINE
   \SYSTEM
      \CurrentControlSet
         \Services
            \Eventlog

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

7 голосов
/ 11 июня 2014

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

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

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

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

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

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

HKLM \ CurrentControlSet \ System \ Services \ Eventlog \ Security

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

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

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

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

2 голосов
/ 23 октября 2013

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

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

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

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

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