2010-10-28 7 views
6

J'ai une application de service Windows 4.0 .Net qui utilise log4net.log4net ne se connecte pas lors de l'exécution d'une application Windows .Net 4.0 intégrée au mode édition

Voici ma configuration log4net.

<log4net> 
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger [%property{Context}] - %message%newline" /> 
    </layout> 
    </appender> 

    <appender name="ColorConsoleAppender" type="log4net.Appender.ColoredConsoleAppender"> 
    <mapping> 
     <level value="ERROR" /> 
     <foreColor value="Red, HighIntensity" /> 
    </mapping> 
    <mapping> 
     <level value="FATAL" /> 
     <foreColor value="Red, HighIntensity" /> 
    </mapping> 
    <mapping> 
     <level value="WARN" /> 
     <foreColor value="Blue, HighIntensity" /> 
    </mapping> 
    <mapping> 
     <level value="INFO" /> 
     <forecolor value="White, HighIntensity" /> 
    </mapping> 
    <mapping> 
     <level value="DEBUG" /> 
     <forecolor value="Green, HighIntensity" /> 
    </mapping> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger [%property{Context}] - %message%newline" /> 
    </layout> 
    </appender> 

    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <appendToFile value="true" /> 
    <datePattern value="yyyyMMdd" /> 
    <file value="Logs/Server.log" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger [%property{Context}] - %message%newline" /> 
    </layout> 
    <maximumFileSize value="10MB" /> 
    <rollingStyle value="Composite" /> 
    <staticLogFileName value="true" /> 
    </appender> 

    <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender"> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger [%property{Context}] - %message%newline" /> 
    </layout> 
    </appender> 

    <root> 
    <level value="ALL" /> 
    <appender-ref ref="ColorConsoleAppender" /> 
    <appender-ref ref="RollingFileAppender" /> 
    </root> 

</log4net> 

Logging fonctionne comme prévu lorsque le service démarre en utilisant l'exe qui a été construit en mode débogage (fichiers journaux sont créés dans le chemin du fichier à droite), mais ne fonctionne pas quand il utilise l'exe construit en mode de libération.

J'ai essayé d'utiliser une DLL log4net recompilée pour .Net 4.0 en suivant les étapes mentionnées dans ce blog .. http://tseonet.blogspot.com/2010/07/making-log4net-run-on-net-40.html.

Mais, cela n'a pas fonctionné non plus.

Toute aide est grandement appréciée.

Répondre

8

Je propose d'activer le débogage interne comme expliqué ici:

log4net - Appenders not working in IIS7.5

+1

Merci beaucoup Stefan. Cela a aidé. En regardant les messages de débogage de log4net, j'ai pu voir que le référentiel n'était pas configuré car log4net n'a pas pu trouver la configuration. L'ordre dans lequel les assemblys ont été chargés dans les modes debug et release était différent. Je ne sais pas si c'était le problème ici. – Deepu

+3

Je pouvais voir que log4net créait le référentiel par défaut [log4net-default-repository] en utilisant le type [log4net.Repository.Hierarchy.Hierarchy] puis essayait de configurer le référentiel en utilisant la configuration si l'assembly était décoré avec l'attribut [assembly: log4net .Config.XmlConfigurator (Watch = true)]. Dans le cas d'une application construite en mode Release, log4net n'a pas pu trouver la configuration car l'assembly chargé n'était pas décoré avec cet attribut. Ajouter cet attribut au fichier AssemblyInfo a résolu le problème. – Deepu

4

Merci Deepu

ajouter [assemblage: log4net.Config.XmlConfigurator (Montre = true)] dans le fichier AssemblyInfo travaillé pour moi

1

Je suis tombé sur le même problème aujourd'hui et après avoir passé par log4net docs a fait ce qui suit et cela a fonctionné pour moi.

log4net.Config.XmlConfigurator.Configure(); 

Vous penserez que cela vaudra la peine d'être partagé. Ci-dessous la classe enregistreur qui utilise log4net en tant que fournisseur

/// <summary> 
/// Logger class using log4net library 
/// </summary> 
public class Log4NetLogger : ILogger 
{ 
    public Log4NetLogger(Type configType) 
    { 
     log4net.Config.XmlConfigurator.Configure(); 
     this._logger = LogManager.GetLogger(configType); 
    } 

} 

Pour moi, attribut d'assemblage était pas une option que j'enveloppai une fonction de journalisation dans un ensemble séparé où log4net a été l'un des fournisseurs.