Czy istnieje sposób skonfigurowania log4j tak, aby wyświetlał różne poziomy logowania do różnych programów dołączających?
Próbuję skonfigurować wiele plików dziennika. Główny plik dziennika przechwytuje wszystkie INFO i powyższe komunikaty dla wszystkich klas. (W fazie rozwoju będzie przechwytywał wszystkie komunikaty DEBUG i wyższe oraz TRACE dla określonych klas).
Następnie chciałbym mieć osobny plik dziennika. Ten plik dziennika przechwyciłby wszystkie komunikaty DEBUG dla określonego podzbioru klas i zignorowałby wszystkie komunikaty dla innych klas.
Czy jest sposób, aby dostać to, czego szukam?
Dzięki, Dan
Odpowiedzi:
To powinno zacząć:
źródło
Może coś takiego?
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <!-- general application log --> <appender name="MainLogFile" class="org.apache.log4j.FileAppender"> <param name="File" value="server.log" /> <param name="Threshold" value="INFO" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%-5p %t [%-40.40c] %x - %m%n"/> </layout> </appender> <!-- additional fooSystem logging --> <appender name="FooLogFile" class="org.apache.log4j.FileAppender"> <param name="File" value="foo.log" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%-5p %t [%-40.40c] %x - %m%n"/> </layout> </appender> <!-- foo logging --> <logger name="com.example.foo"> <level value="DEBUG"/> <appender-ref ref="FooLogFile"/> </logger> <!-- default logging --> <root> <level value="INFO"/> <appender-ref ref="MainLogFile"/> </root> </log4j:configuration>
W ten sposób wszystkie komunikaty informacyjne są zapisywane do server.log; z kolei foo.log zawiera tylko komunikaty com.example.foo, w tym komunikaty na poziomie debugowania.
źródło
Miałem to pytanie, ale z niespodzianką - próbowałem rejestrować różne treści w różnych plikach. Miałem informacje dotyczące dziennika debugowania LowLevel i dziennika użytkownika HighLevel. Chciałem, aby LowLevel przeszedł tylko do jednego pliku, a HighLevel do pliku i syslogd.
Moim rozwiązaniem było skonfigurowanie 3 dołączających, a następnie skonfigurowanie rejestrowania w następujący sposób:
log4j.threshold=ALL log4j.rootLogger=,LowLogger log4j.logger.HighLevel=ALL,Syslog,HighLogger log4j.additivity.HighLevel=false
Część, która była dla mnie trudna do zrozumienia, polegała na tym, że „log4j.logger” mógł mieć wymienionych wielu dołączających. Próbowałem to zrobić pojedynczo.
Mam nadzieję, że to pomoże komuś w pewnym momencie!
źródło
Dla głównego pliku dziennika / programu dołączającego skonfiguruj,
.Threshold = INFO
aby ograniczyć to, co jest faktycznie rejestrowane w programie dołączającym do INFO i wyższych, niezależnie od tego, czy rejestratory mają włączone DEBUG, TRACE, itp.Jeśli chodzi o łapanie DEBUG i nic ponad to ... prawdopodobnie musiałbyś napisać niestandardowy appender.
Jednak nie radziłbym tego robić, ponieważ wygląda na to, że rozwiązywanie problemów i analiza byłyby dość trudne:
źródło
Link do wersji demonstracyjnej: https://github.com/RazvanSebastian/spring_multiple_log_files_demo.git
Moje rozwiązanie opiera się na konfiguracji XML przy użyciu
spring-boot-starter-log4j
. Przykład jest podstawowym przykładem użyciaspring-boot-starter
i dwóch rejestratorów zapisuje w różnych plikach dziennika.źródło