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

Était-ce utile?

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 votre App_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);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top