web-dev-qa-db-fra.com

Où vont les journaux lors de l'exécution d'ASP.NET Core sur IIS 7.5?

Je poste ceci et y répond, car cela m'a laissé perplexe pendant très longtemps. J'ai la ligne suivante dans mon web.config:

<aspNetCore processPath="dotnet" arguments=".\XXX.Server.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false" />

Donc, apparemment, cela devrait se connecter à logs\stdout, mais quand je regarde, il n'y a rien. J'ai fait une chasse aux oies sauvages, cherchant sur tout le disque tout ce qui s'appelait 'log' (qui retournait trop) ou 'stdout' (qui ne retournait rien), et je n'arrivais toujours pas à le comprendre.

14
Andrew Williamson

Vous pouvez probablement vérifier l'Observateur d'événements sur votre machine -> Application pour voir s'il y a des erreurs enregistrées, ce qui pourrait expliquer pourquoi vos fichiers journaux ne sont pas générés.

Cependant, la raison la plus probable est que IIS n'a pas l'autorisation d'écrire dans ce dossier de journal.

  1. Faites un clic droit sur le dossier -> Sécurité
  2. Assurez-vous que l'utilisateur IIS_IUSRS dispose des autorisations suivantes: lecture et exécution, liste, écriture (l'écriture est potentiellement manquante par défaut)
14
Vlatko Vlahek

Vous devez vous assurer que le dossier du journal existe! IIS ne le fera pas pour vous. Une solution aussi simple à ce problème exaspérant.

11
Andrew Williamson

J'ai créé le dossier des journaux mais toujours rien n'a été enregistré. J'ai découvert que vous pouvez utiliser un dossier existant sous home/logfiles et le faire fonctionner sans créer de dossier. Cette solution a fonctionné pour moi telle quelle:

1) Ouvrez le fichier web.config créé dans le dossier racine de l'application publiée.

2) Définissez stdoutlogEnabled sur true et stdoutLogFile sur \? \% Home%\LogFiles\stdout comme ceci:

<aspNetCore processPath="dotnet" arguments=".\SellCarsHereV2.dll" stdoutLogEnabled="true" stdoutLogFile="\\?\%home%\LogFiles\stdout" />

Vous pouvez ensuite accéder à ce chemin et télécharger les fichiers ou utiliser le portail Azure (s'il est hébergé dans Azure). Si vous utilisez le portail Azure:

1) Accédez au service d'application.

2) Allez dans Outils avancés qui vous amène à https: // {votre service d'application} .scm.azurewebsites.net /

3) Cliquez sur le menu Debug Console -> CMD

4) Cliquez sur LogFiles

5) Vous verrez un fichier appelé stdout _ *. Log et vous pouvez cliquer sur le crayon pour le voir. Vous pouvez également télécharger le fichier si vous le souhaitez.

5

Selon le stdoutLogFile=".\logs\stdout" Fourni dans votre fichier web.config , le répertoire logs doit être créé à côté du Web .config, à l'intérieur le répertoire de publication .

Pour créer le sous-répertoire logs, vous pouvez utiliser l'approche décrite dans structure de répertoires ASP.NET Core .

Collez-le à la fin du fichier *.csproj De votre projet publié

<Project>
...
  <Target Name="CreateLogsFolder" AfterTargets="Publish">
    <MakeDir Directories="$(PublishDir)logs" 
              Condition="!Exists('$(PublishDir)logs')" />
  </Target>
</Project>

Pendant le processus de publication après cette modification, le répertoire logs doit être créé s'il n'existe pas dans le répertoire de sortie.

Si vous exécutez par exemple: dotnet publish --output <path_to_your_publish_folder> Vous devriez trouver le répertoire logs à l'intérieur du <path_to_your_publish_folder>

1
kasptom

J'ai fait les étapes suivantes afin d'obtenir des journaux:

  1. Créez un dossier de journaux et accordez un accès en écriture à IIS_IUSRS comme décrit ci-dessus
  2. Définir le chemin absolu dans web.config: stdoutLogFile="C:\xxx\xxx\logs"
  3. Recyclez le pool d'applications
  4. Arrêtez, démarrez le site Web

Modifier

L'étape 2 fonctionne également avec un chemin relatif stdoutLogFile=".\logs\stdout"

1
G. Siganos