2010-10-28 10 views
6

Ho un'applicazione di servizio Windows 4.0 che utilizza log4net.log4net non registra quando esegue un'applicazione Windows .Net 4.0 incorporata in modalità di rilascio

Ecco la mia configurazione di 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> 

registrazione funziona come previsto quando il servizio si avvia mentre si utilizza l'exe che è stato costruito in modalità debug (log file vengono creati nel percorso del file a destra), ma non funziona quando si utilizza l'exe costruito in modalità di rilascio.

Ho provato a utilizzare una dll log4net ricompilata per .Net 4.0 seguendo i passaggi indicati in questo blog .. http://tseonet.blogspot.com/2010/07/making-log4net-run-on-net-40.html.

Ma anche questo non ha funzionato.

Qualsiasi aiuto è molto apprezzato.

risposta

8

suggerisco di attivare il debug interno come spiegato qui:

log4net - Appenders not working in IIS7.5

+1

Grazie mille Stefan. Questo ha aiutato. Guardando i messaggi di debug di log4net ho potuto vedere che il repository non era configurato poiché log4net non riusciva a trovare la configurazione. L'ordine in cui gli assembly sono stati caricati nelle modalità di debug e release erano diversi. Non sono sicuro se questo è stato il problema qui. – Deepu

+3

Ho potuto vedere che log4net crea il repository predefinito [log4net-default-repository] utilizzando il tipo [log4net.Repository.Hierarchy.Hierarchy] e quindi prova a configurare il repository utilizzando la configurazione se l'assembly è stato decorato con l'attributo [assembly: log4net .Config.XmlConfigurator (Watch = true)]. Nel caso dell'applicazione creata in modalità Release, log4net non ha trovato la configurazione poiché l'assembly caricato non è stato decorato con questo attributo. L'aggiunta di questo attributo al file AssemblyInfo ha risolto il problema. – Deepu

4

Grazie Deepu

aggiungendo [assembly: log4net.Config.XmlConfigurator (Guarda = true)] per il file AssemblyInfo lavorato per me

1

Mi sono imbattuto nello stesso problema oggi e dopo aver attraversato log4net docs ha fatto quanto segue e ha funzionato per me.

log4net.Config.XmlConfigurator.Configure(); 

pensato che sarà vale la pena condividere. Qui di seguito è la classe logger che utilizza log4net come fornitore

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

} 

Per me attributo di assembly non era un'opzione come ho avvolto la registrazione funzionalità in un assembly separato dove log4net è stato uno dei fornitori.

Problemi correlati