2013-01-08 12 views
6

Desidero inviare il registro corrente log4net come allegato di posta elettronica utilizzando System.Net.Mail.Attachment ma quando passo il percorso del file viene emesso uno IOException.Inviare un log log4net come un oggetto System.Net.Mail.Attachment genera IOException (processo bloccato)

Attachment mailAttachment = new Attachment(logPath); 

Il processo non può accedere al file 'C: \ Log \ log4net.log' perché è utilizzato da un altro processo

La configurazione appender si presenta così:

<appender name="RootRollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <param name="File" value="C:\Log\log4net.log" /> 
    <param name="AppendToFile" value="true" /> 
    <param name="MaxSizeRollBackups" value="10" /> 
    <param name="MaximumFileSize" value="10024KB" /> 
    <param name="RollingStyle" value="Size" /> 
    <param name="StaticLogFileName" value="true" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <param name="ConversionPattern" value="%date [%username|%thread] %-5level %logger: %message%newline" /> 
    </layout> 
</appender> 

C'è un modo per aggirare questo? Posso copiare il file di registro o in qualche modo rilasciarlo dal processo di blocco?

+1

Quale tipo di Appender stai usando nel file .config puoi pubblicare come appare questa sezione per i principianti '' – MethodMan

risposta

15
<appender name="FileAppender" type="log4net.Appender.FileAppender"> 
    <file value="${TMP}\log-file.txt" /> 
    <appendToFile value="true" /> 
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
    </layout> 
</appender> 

usando <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> dirà log4net per bloccare solo il file per un breve momento, mentre si sta facendo la scrittura vera e propria. C'è una leggera penalizzazione delle prestazioni, ma ti permette di fare cose come aggiungerlo come allegato molto più facile.

In caso contrario, log4net bloccherà il file indefinitamente mentre il processo è in esecuzione.

Problemi correlati