Loupe

Utilisation des scripts postpublish en ASP.Net Core 1.0 pour modifier le chemin des logs Kestrel

Pour faire suite à mon dernier article traitant du sujet des logs Kestrel sur Azure, il semblerait que parfois (notamment sur des anciennes solutions), lors de la publication de l'application sur Azure, le chemin du stdoutLogFile n'est pas bien modifié, comme il devrait l'être ce qui entraîne la non sauvegarde des logs ... C'est assez embêtant, non ? Mais avec Powershell et la propriété scripts du project.json, ceci s'avère assez simple !

Comment modifier le chemin dans le web.config ?

Pour régler ce petit problème et ne pas devoir le modifier à la main après chaque publication, j'ai décidé de créer un script powershell qui modifie l'ancienne valeur et la remplace par la bonne : "\\?\%home%\LogFiles\stdout". Je vérifie également que les logs ont été activés, grâce à la propriété stdoutLogEnabled pour modifier le chemin. Voici le script, qui est assez simple :

param([String]$publishfolder='')

$webConfigUri = $publishfolder + '\web.config'

Write-Host "Web config uri : $webConfigUri"

$webConfig = (Get-Content $webConfigUri) -as [Xml]

if($webConfig.configuration.'system.webServer'.aspNetCore.stdoutLogEnabled){
    $webConfig.configuration.'system.webServer'.aspNetCore.stdoutLogFile = '\\?\%home%\LogFiles\stdout'
    $webConfig.Save($webConfigUri)
}

 

Comment lancer des scripts pouvant s'éxécuter après la publication ? 

Il existe dans le fichier project.json de chaque application asp.net core 1.0, une propriété "scripts" qui est un objet et ayant des propriétés permettant d'éxécuter des scripts à différents instants du processus de compilation :

  • precompile (avant la compilation)
  • postcompile (après la compilation)
  • prepublish (avant la publication)
  • postpublish (après la compilation)

Dans chacune de ces propriétés, il est possible d'ajouter un ou plusieurs scripts à chaque étape, qui seront lancés dans l'ordre où ils ont été ajouté. Voici ce qu'il faut ajouter dans le noeud "scripts" du "project.json" pour lancer le script Powershell et modifier le chemin du stdout : 

"scripts": {
    "postpublish": [
      "powershell -file enableStdoutScript.ps1 %publish:OutputPath%"
    ]
  }

Dans mon exemple, je pars du principe que mon fichier Powershell s'appelle enableStdoutScript.ps1 et qu'il est à la racine de mon projet (au même niveau que mon "projet.json")

 

Vous devriez maintenant avoir les logs Kestrel sauvegardés dans votre application asp.net core 1.0 sur Azure !

Photo de profil

Ces billets pourraient aussi vous intéresser

Vous nous direz ?!

Commentaires

comments powered by Disqus