2010-02-14 3 views
30

Je suis en train de construire une application ASP.Net-MVC en utilisant log4net pour la journalisation, mais l'enregistreur semble s'arrêter au hasard. Il se connectera heureusement pendant un certain temps, puis s'arrêtera, puis recommencera après un certain temps. Je ne suis même pas sûr de savoir ce qui le fait reprendre la journalisation. Je ne parle pas de quelques messages perdus - parfois il disparaît pendant une longue période de temps, comme une heure ou deux.Log4net arrête de manière aléatoire la consignation.

Pourquoi cela s'arrêterait-il et commencerait-il ainsi? Comment dois-je configurer correctement ceci afin qu'il ne s'arrête pas aléatoirement comme il le fait?

Voici ma configuration:

<log4net debug="true"> 
<appender name="RollingLogFileAppender" 
     type="log4net.Appender.RollingFileAppender"> 

    <file value="..\Logs\\CurrentLog.txt" /> 
    <appendToFile value="true" /> 
    <datePattern value="yyyyMMdd" /> 

    <rollingStyle value="Date" /> 
    <filter type="log4net.Filter.LevelRangeFilter"> 
    <acceptOnMatch value="true" /> 

    <levelMin value="INFO" /> 
    <levelMax value="FATAL" /> 
    </filter> 

    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern 
    value="%-5p %d %5rms %-22.22c{1} %-18.18M - %m%n" /> 
    </layout> 

</appender> 

<root> 
    <level value="INFO" /> 
    <appender-ref ref="RollingLogFileAppender" /> 
</root> 

+1

Dans mon cas, il a été réinitialisation l'enregistrement (re-configuration, non pas par la conception ..) qui a causé ce genre de problèmes - voir http://neilkilbride.blogspot.com.au /2008/04/configure-log4net-only-once.html – Jonno

+0

Pourriez-vous ajouter une réponse ou un commentaire expliquant ce qui a causé votre problème, si vous avez trouvé une raison? –

+0

Oui, il serait bon de savoir ce qui a causé votre problème comme l'a dit Mark. En passant, j'avais le même problème et en réglant ReconnectOnError à true sous la configuration ADONetAppender travaillé pour moi. – Jportelas

Répondre

56

Log4Net sera fail silently si quelque chose va mal et il est incapable d'écrire à ses appenders. C'est en fait une bonne chose, car cela signifie qu'un peu d'échec de la journalisation ne fera pas tomber un système en bonne santé, mais cela peut être ennuyeux quand quelque chose ne se connecte pas comme prévu.

Votre meilleur pari est d'activer le internal logging de log4net pour faire quelques diagnostics et (heureusement) comprendre pourquoi il échoue.

donc dans le fichier de configuration de votre application ajouter:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <appSettings> 
     <add key="log4net.Internal.Debug" value="true"/> 
    </appSettings> 
</configuration> 

qui tournera sur l'enregistrement interne, qui est envoyé à System.Diagnostics.Trace, afin que vous puissiez ajouter:

<configuration> 
    ... 
    <system.diagnostics> 
     <trace autoflush="true"> 
      <listeners> 
       <add 
        name="textWriterTraceListener" 
        type="System.Diagnostics.TextWriterTraceListener" 
        initializeData="C:\tmp\log4net.txt" /> 
      </listeners> 
     </trace> 
    </system.diagnostics> 
    ... 
</configuration> 

pour capturer à un fichier.

+1

Avez-vous un exemple plus complet d'un tel fichier de configuration? J'ai essayé de nombreuses variantes, et je continue d'obtenir des erreurs XML à partir de XmlSerializationReader. Même une balise '' vide est la différence entre l'exception et non. –

+0

J'ai le même problème, et dans mon cas, il semble que chaque fois que j'ouvre une boîte de dialogue de fichier standard, la DLL de superposition d'icônes [Box] (https://box.com) écrase le fichier log4net.config en cours de traitement avec le sien. –

+0

Ce n'est en fait PAS une bonne chose car il peut y avoir des outils de surveillance du système et de notification d'erreur en fonction de cela et s'il arrête la journalisation, il n'y a aucun moyen de savoir qu'une exception se produit.Je déteste cet outil de diagraphie, c'est toujours un casse-tête quelle que soit la compagnie que je vais, quelle que soit la version utilisée, il y a toujours un mal de tête. Le produit merdique des développeurs de Crappy .. – sotn

0

Envoyez un message de journal de test le plus tôt possible dans le cycle de vie de votre application, juste un simple LogManager.GetLogger("Init").Info("Starting logging"). Si un autre code référencé commence à démarrer la journalisation, une partie de votre processus d'initialisation peut échouer (car il charge les paramètres d'un autre assembly, ce qu'il ne fait qu'une seule fois).

Lire ici: https://logging.apache.org/log4net/release/faq.html#first-log