web-dev-qa-db-fra.com

Écriture dans un journal des événements dans ASP.NET sur Windows Server 2008 IIS7

J'essaie d'utiliser log4net pour écrire dans un journal des événements client sous IIS7 sur Windows Server 2008 SP1. Cependant, le compte ne semble pas avoir accès à l'écriture dans le journal des événements. Est-ce que quelqu'un a des suggestions?

28
mhenderson

Le problème est probablement la source de votre événement. Vous devez créer une source d'événements avant de pouvoir écrire dans le journal des événements (si vous ne le faites pas, l'objet Journal des événements essaie d'en créer une pour vous "automatiquement" la première fois que vous écrivez dans le journal).

Vous devez avoir des autorisations plus élevées pour créer une source de journal des événements. Dans certaines de mes applications Web, j'ai mis le code pour créer la source d'événement dans ma configuration (la configuration s'exécute en tant qu'administrateur, donc je suis toujours assuré de pouvoir créer la source).

Il vous suffit de créer la source une fois. Après cela, votre application ASP.Net doit disposer d'autorisations suffisantes pour écrire des entrées spécifiant la ou les sources que vous avez créées.

Vous pouvez utiliser un EventLogInstaller dans votre configuration pour créer la source, ou vous pouvez simplement écrire un petit utilitaire pour appeler EventLog.CreateEventSource () en tant qu'administrateur.

Je vais vous montrer les deux façons:


// 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);
        }

Méthode 2: appelez simplement CreateEventSource une fois en tant qu'administrateur (vous pouvez, par exemple, mettre le code suivant dans une application console et exécuter l'application console en tant qu'administrateur


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

Bonus: si Powershell est installé sur votre serveur, vous pouvez le faire à partir de l'invite de commande Powershell: (Assurez-vous que vous exécutez Powershell en tant qu'administrateur)


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

Hop ça aide

63
JMarsch

Accordez l'autorisation ASPNET au journal des événements.

Exécutez -> regedit -> Parcourir pour

HKEY_LOCAL_MACHINE
   \SYSTEM
      \CurrentControlSet
         \Services
            \Eventlog

Cliquez avec le bouton droit sur les autorisations de sélection et donnez au compte ASPNET le contrôle total

15
Michael Kniskern

Réponse de résolution des autorisations IIS 8

Je suis paresseux et je n'ai pas créé de journal spécial dans mon code, j'ai plutôt utilisé:

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

Juste pour compléter la réponse de Michael Dans IIS8, l'utilisateur utilisé par IIS lors de l'exécution du code côté serveur est: IIS_IUSRS

(en fait, c'est plus compliqué car il y a des comptes virtuels dans IIS_IUSRS mais ils obtiennent des autorisations de ce compte, voir IIS_IUSRS et IUSR autorisations dans IIS8 forme plus de détails)

Cet utilisateur requiert uniquement l'autorisation de lecture sur ce nœud de registre:

HKLM\CurrentControlSet\System\Services\Eventlog\Security

La raison en est que lorsqu'une nouvelle source de journal est écrite dans, avant de la créer, le système veut vérifier qu'elle n'existe pas et doit donc LIRE les noms de source.

De plus, si vous utilisez iis express de visual studio, il s'exécutera sous vos informations d'identification personnelles, donc si vous n'avez pas l'autorisation d'accès en lecture au nœud de registre ci-dessus, vous devrez également l'ajouter lors du débogage sous visual studio.

(Si les administrateurs ont l'autorisation sur le nœud et que vous êtes dans ce groupe, cela ne suffit pas, vous devez exécuter Visual Studio `` en tant qu'administrateur '' - qui ne fonctionnera qu'à partir du raccourci Visual Studio et non du raccourci SLN)

Autre remarque: si l'ordinateur se trouve dans un domaine et que vous ne pouvez pas trouver le compte IIS_IUSRS lors de la modification des autorisations de registre, il est probable que vous cherchiez au mauvais "emplacement", en recherchant le compte sur le domaine Active Directory au lieu du local ordinateur)

7
thedrs

Je pense qu'une option plus sûre pour le bon exemple de @Michael Kniskern est:

regedit ...

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\your_new_application_log

Donnez un contrôle total uniquement au journal d'application spécifique créé pour les besoins de votre application (dans cet exemple, cliquez avec le bouton droit sur votre_nouveau_application_log et définissez-y les autorisations). Une fois le nouveau nom de journal créé, il apparaîtra dans le registre imbriqué sous le nœud du journal des événements comme ci-dessus.

2
Sheldon Hage

J'utilise IIS 10, et définissez l'identité du pool sur Système local

voir référence: https://stackoverflow.com/a/9067391/9975799

0
tyne