2013-07-23 26 views
7

voglio aggiungere nuovo registro per file.Questa è il mio appender:Log4net non scrive su file

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <file value="mylogfile.txt"/> 
    <appendToFile value="true"/> 
    <rollingStyle value="Size"/> 
    <maxSizeRollBackups value="5"/> 
    <maximumFileSize value="10MB"/> 
    <staticLogFileName value="true"/> 
    <filter type="log4net.Filter.StringMatchFilter"> 
    <stringToMatch value="test"/> 
    </filter> 
    <filter type="log4net.Filter.StringMatchFilter"> 
    <stringToMatch value="error"/> 
    </filter> 
    <filter type="log4net.Filter.DenyAllFilter"/> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date [%thread] %level %logger - %message%newline%exception"/> 
    </layout> 
</appender> 
<root> 
    <level value="All"/> 
    <appender-ref ref="RollingFileAppender"/> 
</root> 

e sulla mia classe aggiungo

[assembly: XmlConfigurator(Watch = true)] 

e io aggiungo a tutti l'accesso per la file ma: log4net non scrive sul file. Perché?

risposta

23

Log4net fallisce silenziosamente quando c'è un problema. L'idea progettuale è che nessuna registrazione è preferibile per rimuovere l'applicazione. Per capire cosa c'è che non va, attivare il debug interno di Log4net con l'aggiunta di questa chiave al file .config [app/web]:

<appSettings> 
    <add key="log4net.Internal.Debug" value="true"/> 
</appSettings> 

i messaggi di debug verranno scritti nella console o al sistema System.Diagnostics.Trace. Ulteriori dettagli da Phill Haack a http://haacked.com/archive/2006/09/26/Log4Net_Troubleshooting.aspx/

Ci sono diversi motivi per cui Log4net potrebbe fallire. Problemi di autorizzazione nella directory del file di registro, per gli avviatori (in particolare per i processi del server, in cui è probabile l'esecuzione in un insieme limitato di autorizzazioni per la sicurezza).

+0

Excelent punta! In 2 minuti ho risolto un problema che ero rimasto bloccato per un'ora. – StinkyCat

+0

Questo non sembra funzionare per me, fino a quando ho capito che l'output per il debug va alla finestra Immediata, non a quella Output – JayJay

0

È necessario ripristinare la registrazione come il primo passo nella vostra applicazione, e dalla stessa assemblea che si ha il tag [assembly]:

Dal docs:

Pertanto, se si utilizza la configurazione attributi è necessario richiamare log4net per consentirgli di leggere gli attributi. Una semplice chiamata a LogManager.GetLogger causerà la lettura e l'elaborazione degli attributi sull'assieme chiamante . Pertanto è imperativo effettuare una registrazione la chiamata il prima possibile durante l'avvio dell'applicazione e prima che qualsiasi assembly esterno sia stato caricato e richiamato.

aggiungere qualcosa di simile nella vostra start up Codice:

LogManager.GetLogger("Initialises logging from assembly attributes"); 
0

Si dovrebbe aggiungere questa sezione di configurazione:

<configSections> 
<section name="log4net"  type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> 
</configSections> 

per riferirsi alla configurazione log4net.

Problemi correlati