2012-09-10 7 views
9

Sto provando a configurare log4net per la prima volta, sono certo di avere tutto configurato correttamente, tuttavia, dopo aver ottenuto i file di registro vuoti ho acceso il debugger di log4net. Ora sto vedendo continuamente il seguente errore:log4net GenericFailure. Impossibile acquisire il blocco sul file

log4net:ERROR [RollingFileAppender] ErrorCode: GenericFailure. Unable to acquire lock on 
file "file path\file name" The process cannot access the file "file path\file name" because 
it is being used by another process. 

Io attualmente ho log4net configurato attraverso il mio file web.config così:

<log4net debug="true"> 
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <file value="Logs\\TransferPicturesApplicationLog.txt"/> 
    <appendToFile value="true"/> 
    <rollingStyle value="Size"/> 
    <maxSizeRollBackups value="5"/> 
    <maximumFileSize value="10MB"/> 
    <staticLogFileName value="true"/> 
    <filter type="log4net.Filter.LevelRangeFilter"> 
    <param name="LevelMin" value="ERROR"/> 
    <param name="LevelMax" value="DEBUG"/> 
    </filter> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date [%thread] %level %logger - %message%newline"/> 
    </layout> 
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
</appender> 
<root> 
    <level value="INFO"/> 
    <appender-ref ref="RollingFileAppender"/> 
</root> 
<logger> 
    <level value="DEBUG"/> 
    <appender-ref ref="RollingFileAppender"/> 
</logger> 
</log4net> 

Help !!!

+0

1) La versione del log4net? 2) Questo succede quando vengono lanciate più istanze della stessa applicazione? – sll

risposta

2

La mia ipotesi sarebbe che si dispone di più copie dell'appender tra diversi assembly che tentano di accedere a questo percorso, in modo che tutti tentano di afferrare il file di registro appropriato allo stesso tempo. Tuttavia, per sicurezza, ti consiglio di utilizzare Unlocker per assicurarti che il tuo file non sia trattenuto da qualcos'altro che non ti aspetti. Se stai avendo più istanze di questo appender che prova ad aprire lo stesso file, il tuo problema sarebbe che non stai usando l'appender correttamente; se l'appender viene usato attraverso gli assembly, le due invocazioni di esso non giocheranno bene l'una con l'altra, portando a un errore già in uso come questo. Se questo è il caso, il refactoring è probabilmente l'unica opzione.

+0

Risolto questo problema. Sembra che ogni problema che risolvo con log4net ne crei un altro ... – Homer2029

+1

Stai dicendo che log4net non è thread-safe? –

5

Inoltre ho ottenuto questo errore perché ho specificato il nome di una directory al contrario di un file nella appender, il messaggio di errore è criptico:

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/> 
     <file value="C:\DirectoryNameHere\MyBad" /> 
+0

Non so perché ha funzionato, ma è successo. Grazie. –

0

ho avuto questo problema quando ho provato a scrivere il file di log in una sottodirectory (uguale a @PeteN). Quando si utilizza la sintassi corretta questa doens't si verificano più, in set de appender config:

<appender name="TestLogAppender" type="log4net.Appender.RollingFileAppender"> 
    <file type="log4net.Util.PatternString" value=".\logDirectory\LogFileName.csv" /> 
    <....> 

speranza che questo aiuta

+0

Ho provato questo solo ora, e non vedo alcuna differenza. –