Log4net et service Windows. Que dois-je faire pour que cela fonctionne

S’il vous plaît, aidez-moi, je veux exécuter log4net sur mon service Windows. Et c’est simplement – mission impossible.

Tout d’abord, avec les formulaires Win – travaillez très bien.

Voici ce que je fais avec le service Windows:

Ajouter à l’assemblage:

[assembly: log4net.Config.XmlConfigurator(Watch = true)] 

Ma config:

   

Ma classe:

 public class LogProvider { private ILog _Log; public LogProvider(ssortingng className) { XmlConfigurator.Configure(); _Log = LogManager.GetLogger(className); } public void Info(object message) { _Log.Info(message); } } 

Et dans le programme principal:

 using log4net; using log4net.Config; (...) private LogProvider _logProvider; (...) _logProvider = new LogProvider("Test"); _logProvider.Info("asds"); 

QUE SE PASSE-T-IL ?

Si cela est possible, montrez-moi s’il vous plaît un exemple de projet – parce que ce code ci-dessus est d’environ 100 version ou plus. Je commence à croire qu’il est impossible d’utiliser log4net avec le service Windows.


METTRE À JOUR:

Donc, à propos des permissions: En fait, je reçois une exception, à propos des permissions. Je résous ce problème avec cette ligne (requirePermission = “false”):

 

Maintenant, cela ne fonctionne toujours pas, sans exception.

Ceci est mon dernier code exec:

 protected override void OnStart(ssortingng[] args) { try { LogProvider lp = new LogProvider("asd"); lp.Info("asd2"); } catch (Exception ex) { System.IO.FileInfo _file; System.IO.StreamWriter _writer; _file = new System.IO.FileInfo("D:\\Log\\asdCatch.txt"); _writer = _file.CreateText(); _writer.WriteLine("[" + DateTime.Now.ToSsortingng() + "] Init Log"); _writer.WriteLine("[" + DateTime.Now.ToSsortingng() + "] " + ex.ToSsortingng()); _writer.Close(); } } 

Maintenant, je suis vraiment confus, j’ai créé un autre service Windows et cela fonctionne – sans cette ligne avec permission. OMG, c’est bizarre.


UPDATE2: OK, je l’ai. Je ne sais pas comment cela s’est passé, mais j’ai trouvé cette ligne dans mon app.config:

     

Je travaille sur un programme de 15 sous-projets et sérieusement, je ne sais pas d’où il vient: /

Nous avons eu un problème car le répertoire d’exécution des services est C:\Windows\System ou C:\Windows\System32 . Par conséquent, le fichier log4net.config doit figurer dans votre répertoire système, ce qui n’est pas souhaitable ou vous devez indiquer le chemin d’access à votre fichier log4net.config.

Très probablement, si cette journalisation fonctionne dans une application Windows, il s’agit d’un problème d’permissions . Lorsque vous vous connectez à un service Windows, l’utilisateur sous lequel le service Windows est exécuté doit disposer d’permissions d’écriture sur le dossier auquel vous essayez de vous connecter.

Aussi, vous devriez essayer d’activer le débogage de log4net pour voir si cela vous aide.

  ... configuration ...  

Vous devriez également regarder ma réponse dans un message très similaire à celui-ci s’il y a des questions supplémentaires:

log4net ne crée pas de fichier journal lorsqu’il est déployé sur IIS7

Le service log4net + windows a été un succès. Vous pouvez activer le débogage interne de log4net (http://log4net.sourceforge.net/release/1.2.0.30316/doc/manual/faq.html#internalDebug) et exécuter votre service mode console pour afficher toute mauvaise configuration possible

essayez ceci aussi:

 [assembly: log4net.Config.XmlConfigurator(ConfigFile = "app.config", Watch = true)]