Hej, mam tę konfigurację w moim web.config
<log4net>
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
<param name="File" value="mylog.log" />
<param name="AppendToFile" value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="Header" value="" />
<param name="Footer" value="" />
<param name="ConversionPattern" value="%d [%t] %-5p %m%n" />
</layout>
</appender>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
<layout type="log4net.Layout.PatternLayout">
<param name="Header" value="[Header]\r\n" />
<param name="Footer" value="[Footer]\r\n" />
<param name="ConversionPattern" value="%d [%t] %-5p %m%n" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="LogFileAppender" />
<appender-ref ref="ConsoleAppender" />
</root>
</log4net>
ale log4net nie działa. Mój projekt kompiluje się dobrze i nie pojawiają się żadne błędy podczas debugowania. Wiersze, w których mówię, log.debug("somemessage")
działają poprawnie, ale nie mogę znaleźć mylog.log
pliku, więc gdzie to jest?
Odpowiedzi:
Jedynym sposobem na tego typu rzeczy jest dodanie
XmlConfigurator
atrybutu do zespołu, umieszczając następujący wiersz w swoimAssemblyInfo.cs
:W przeciwnym razie log4net nigdy się nie aktywuje.
źródło
AssemblyInfo
tak szybko, jak myślisz.Wydaje mi się, że albo log4net w ogóle się nie loguje, albo plik nie kończy się tam, gdzie się tego spodziewasz.
Po pierwsze, czy faktycznie dzwoniłeś
gdziekolwiek w Twoim kodzie? Jeśli powyższy fragment kodu XML znajduje się w pliku konfiguracyjnym aplikacji, to wywołanie załatwi sprawę. Jeśli fragment kodu xml znajduje się we własnym pliku, musisz użyć
.Configure(string)
przeciążenia, które przenosi ścieżkę do pliku. Bez tego wywołania (lub najwyraźniej atrybutu poziomu zespołu, o którym wspomniał Kirk Woll), log4net w ogóle nie będzie rejestrował.Jeśli uważasz, że to wszystko jest zrobione, a log4net powinien rejestrować, być może powinieneś umieścić pełną ścieżkę do pliku dziennika podczas dalszego debugowania. Dzięki temu będziesz mieć pewność, gdzie powinien znajdować się plik .
źródło
Jest jeszcze jedna mała pułapka, patrz tutaj: http://logging.apache.org/log4net/release/manual/configuration.html#dot-config
ta
[assembly: log4net.Config.XmlConfigurator]
metoda nie działa z app.config. Jeśli konfigurujesz log4net z app.config, musisz użyćlog4net.Config.XmlConfigurator.Configure()
metody.źródło
Oto moja lista kontrolna, kiedy log4net okazuje się krnąbrny:
źródło
W przypadku dodawania projektu ASP.NET MVC
do Global.asax.cs pomaga również:
źródło
Oto kroki, które ostatecznie sprawiły, że moje logowanie plików zaczęło działać:
<appender name="MainLogger"... <layout type="log4net.Layout.SimpleLayout"/>
<add key="log4net.Internal.Debug" value="true"/>
do swojegoappSettings
.źródło
Miałem doświadczenia, w których systemy logowania zawodzą cicho bez wywoływania wyjątków. Przypuszczam, że ma to sens, ponieważ jeśli rejestrator rejestruje błędy, to w jaki sposób może zarejestrować błąd, którego nie może wykonać rejestrowania?
Jeśli więc plik nie został utworzony na dysku, zacznij od sprawdzenia uprawnień systemu plików aby upewnić się, że użytkownik, na którym działa Twoja aplikacja, może zapisać nowy plik w tej lokalizacji na dysku.
Do celów testowych możesz ręcznie utworzyć plik na dysku, który powinien zostać zapisany i otworzyć wszystkim uprawnienia do zapisu. Jeśli rejestrator zacznie do niego zapisywać, wiesz, że jest oparty na pozwoleniach, a nie na konfiguracji.
źródło
Ze swojej strony zapomniałem oznaczyć plik konfiguracyjny do skopiowania podczas kompilacji aplikacji.
Po prostu kliknij prawym przyciskiem myszy plik log4net.config, wybierz właściwość, a następnie wybierz opcję Kopiuj do katalogu wyjściowego, aby skopiować XXXX
źródło
Wypróbowałem wszystkie powyższe, ale nic nie działało. Dodanie tej linii w sekcji app.config
configSections
działało dla mnie.Upewnij się, że
Version
iPublicKeyToken
jest poprawneźródło
mówi „napisz mylog.log do właściwego folderu”. Oznacza to, że jeśli Twoja aplikacja internetowa jest pod usługą IIS, dziennik zostanie zapisany w C: \ inetpub \ wwwroot \ appname \ mylog.log.
Jeśli nie ma pliku dziennika, być może konto, na którym działa aplikacja, nie ma uprawnień do zapisu w folderze. Możesz uruchomić Process Monitor z SysInternals, aby sprawdzić, czy i gdzie plik jest zapisywany.
Uruchom VS również w trybie debugowania, aby sprawdzić, czy są zgłaszane jakiekolwiek wyjątki (Debug -> Wyjątki -> Wyjątki CLR, sprawdź Zgłoszenie).
źródło
W moim przypadku zapomniałem ustawić właściwości pliku log4Net.config na „Treść”, więc plik nie został uwzględniony we wdrożeniu. Więc zwróć na to uwagę:
źródło
Niestety żadne z powyższych nie pomogło. Jawna konfiguracja w klasie, która miała być rejestrowana dodatkowo w stosunku do poprzednich sugestii ustawień, załatwiła sprawę.
źródło
Po kilku godzinach zorientowałem się, dlaczego to nie działa dla mnie ...
miałem:
ale powinno być:
Więc upewnij się, że ILog znajduje się w pierwszej linii ....
źródło