2012-09-10 19 views
9

Próbuję skonfigurować log4net po raz pierwszy, jestem pewien, że wszystko zostało poprawnie skonfigurowane, jednak po uzyskaniu pustych plików dziennika włączyłem debugger log4net. Jestem teraz ciągle widząc następujący błąd:log4net GenericFailure. Nie można uzyskać blokady pliku

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. 

Obecnie mam log4net skonfigurowany przez mojego pliku Web.config wygląda następująco:

<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> 

Pomocy !!!

+0

1) wersja log4net? 2) Czy dzieje się tak, gdy uruchomionych jest wiele instancji tej samej aplikacji? – sll

Odpowiedz

2

Domyślam się, że masz wiele kopii dodatku na różnych zestawach próbujących uzyskać dostęp do tej ścieżki, więc wszyscy próbują pobrać odpowiedni plik dziennika w tym samym czasie. Jednak, aby być pewnym, polecam użyć Unlocker, aby upewnić się, że plik nie jest przechowywany przez coś innego, czego się nie spodziewasz. Jeśli masz wiele wystąpień tego nadawcy próbującego otworzyć ten sam plik, problem polega na tym, że nie używasz poprawnie aplikatora; jeśli aplikator jest używany w poprzek złożeń, wówczas dwie inwokacje nie będą ładnie się ze sobą nawzajem, prowadząc do takiego błędu już w użyciu. W takim przypadku refaktoryzacja jest prawdopodobnie jedyną opcją.

+0

Rozwiązano ten problem. Wygląda na to, że każdy problem rozwiązany przez log4net tworzy kolejny ... – Homer2029

+1

Czy mówisz, że log4net nie jest bezpieczny dla wątków? –

5

ja też mam ten błąd, bo podano nazwę katalogu, w przeciwieństwie do pliku w appender, komunikat o błędzie jest tajemniczy:

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

Nie wiem, dlaczego to zadziałało, ale tak się stało. Dzięki. –

0

mam ten problem, gdy starałem się napisać logfile w podkatalogu (tak samo jak @PeteN). Podczas korzystania z prawidłową składnię tego doens't nastąpić już w zestawie de appender config:

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

nadzieję, że to pomaga

+0

Próbowałem tego właśnie teraz i nie widzę żadnej różnicy. –