Comment configurer log4net pour un service Windows c #
-
05-07-2019 - |
Question
J'ai un service Windows dans lequel le fichier app.config et les fichiers log4net.config sont séparés. La journalisation ne fonctionne pas.
Dans mon fichier app.config, la section contient les éléments suivants:
<add key="log4net.Config" value="log4net.config"/>
Cela fonctionne si, dans la valeur, je spécifie un chemin absolu vers le fichier log4net.config.
Dois-je fournir un chemin absolu au log4net.cong? Les fichiers log4net.config et app.config se trouvent dans le même dossier que l'exécutable.
des idées?
Parag
La solution
Peut-être que cela est utile ( Transférer votre configuration Log4Net hors de web.config avec les sites Web ASP.NET 2.0 ).
Voici les parties qui pourraient vous intéresser:
Demander à l'application de configurer log4net en utilisant ce fichier de configuration. Là sont vraiment deux endroits pour cela. Premier, le global.asax et le second fichier assemblyInfo.cs. Notez que la plupart du temps, vous allez commencer avec un fichier global.asax avec tout le code en ligne. Pour une raison quelconque, le seul comme je pouvais le faire fonctionner était de casser le global.asax à utiliser un code-behind et puis le cul fichier assemblyInfo.cs. Donc ça finit ressemblant à ceci.
global.asax: <% @ langage d'application = " C # " Inherits = & Quot; GlobalAsax & Quot; % > global.asax.cs (dans votre dossier App_Code):
using System;
using System.Web;
public class GlobalAsax : HttpApplication
{
// you may have lots of other code here
void Application_Start(object sender, EventArgs e)
{
log4net.Config.XmlConfigurator.Configure();
}
}
Maintenant que vous avez votre application en appelant la configuration de log4net, vous peut définir un attribut dans votre assemblage info pour que log4net sache où cherchez le fichier de configuration.
AssemblyInfo.cs
(dans votreApp_Code
dossier):
[assembly:log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
Le drapeau de surveillance indique à log4net de conserver un oeil sur le fichier de configuration pour changements potentiels. Ceci est utile si vous voulez changer la configuration de la journalisation des erreurs aux erreurs uniquement au milieu de vos tests.
Pour vous assurer que le log4net.config
est toujours présent, ajoutez le fichier log4net.config au csproject et réglez-le sur CopyAlways
. Il devrait être présenté dans le dossier de débogage.
Vous pouvez utiliser un script pour tout copier dans un dossier de publication ou, si vous utilisez un projet de configuration MS, ajoutez manuellement ce fichier dans le projet. Une référence sera ensuite ajoutée.
Autres conseils
Pour le service Windows, le répertoire actuel est Windows \ system32 - et XmlConfigurator.Configure () utilise FileInfo qui traite les chemins relatifs par rapport au répertoire actuel. Log4net recherche donc son fichier de configuration dans Windows \ System32.
XmlConfiguratorAttribute utilise en revanche le répertoire de base de l'application, c'est pourquoi il fonctionne toujours.
Vous pouvez également effectuer les opérations suivantes avant d'appeler XmlConfigurator.Configure ():
System.IO.Directory.SetCurrentDirectory (AppDomain.CurrentDomain.BaseDirectory);