Chociaż mam przyznało dobrodziejstwa dla użytkowników poniżej, które mają próbowali pomóc, oryginalne pytanie pozostaje bez odpowiedzi. Nie istnieje faktyczne rozwiązanie , które zapewnia, że logback.groovy skonfigurowane rejestrowanie jest honorowane w ramach testów jednoczasowych. Testy załadować config logback i to nie zgłosić odpowiedni poziom, a mimo to rzeczywisty rejestrowanie przetestować (wyłącznie za pośrednictwem slf4j) jest w każdej lub TRACE poziomLogger slf4j nie używa logback skonfigurowanego poziomu
wiem inni napotkał ten sam problem i go jest bardzo denerwujące, gdy testy dużych projektów zabierają dużo więcej czasu ze względu na to, że rejestrowanie konsoli jest zbyt szczegółowe. Nie mogę dalej rzucać nagród pod to pytanie. Mam nadzieję, że ktoś wymyśli dobre rozwiązanie, które pozwoli rejestrowanie testów być odpowiednio skonfigurowane na różnych poziomach za pośrednictwem właściwości systemu. Następnie dla projektu można skonfigurować różne konfiguracje, aby testy mogły być konfigurowane na różnych poziomach progowych rejestrowania.
Moje rejestrowania jest skonfigurowany przez logback poprzez plik logback.groovy
Teraz, kiedy mój projekt Maven POM który agreguje wszystkie inne projekty rozpoczyna się, gdy przechodzi im przez cały właściwość systemu, aby ustawić odpowiedni poziom rejestrowania.
Jednak, gdy testy jednoczęściowe są uruchomione, z jakiegoś powodu program rejestrujący nie pobiera poprawnego poziomu, mimo że klasy testowe static @ beforeClass zapewniają prawidłowe skonfigurowanie dziennika.
To nie są rejestratory w testach, które są problemem, - no - tak, one też -, prawdziwym problemem jest to, że rejestratory w sekcjach kodu, które działają (wszystkie moje programy rejestrujące wszędzie) są ustawione do niewłaściwego poziomu logowania. Nie zbierają tego, co rejestrowane jest po skonfigurowaniu testów programu.
Jednak projekty zgłaszają poprawność, gdy logback inicjuje się za pomocą pliku logback.goovy. Jednak rzeczywisty poziom rejestrowania jest ustawiony na wartość TRACE lub ALL
Z poniższego wyjścia jasno wynika, że funkcja logback skonfigurowała się na INFO. Jednak pierwsza instrukcja zapisywania projektu w TRACE (ostatnia linia) pokazuje, że nie jest ona pobierana.
Pomoc.
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running groovy.text.StreamingTemplateEngineTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.245 sec
Running net.abcd.templating.InlinerTest
01:22:15,265 |-INFO in [email protected] - Added status listener of type [ch.qos.logback.core.status.OnConsoleStatusListener]
01:22:15,290 |-INFO in [email protected] - Setting ReconfigureOnChangeFilter scanning period to 5 minutes
01:22:15,290 |-INFO in ReconfigureOnChangeFilter{invocationCounter=0} - Will scan for changes in [[C:\Users\ABDC\Dropbox\workspace\abcd\AbcdTemplating\conf\logback.groovy]] every 300 seconds.
01:22:15,290 |-INFO in [email protected] - Adding ReconfigureOnChangeFilter as a turbo filter
01:22:15,312 |-INFO in [email protected] - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
01:22:15,316 |-INFO in [email protected] - Naming appender as [STDOUT]
***********************************************************
LOGGING MODE PROPERTY 'net.abcd.logging.level' SET TO: [info]
IT CAN BE SET TO: OFF, ERROR, WARN, INFO, DEBUG, TRACE, ALL, INFO
***********************************************************
getLogLevel() returned 'INFO'
01:22:15,496 |-INFO in [email protected] - Setting level of logger [ROOT] to INFO
01:22:15,532 |-INFO in [email protected] - Attaching appender named [STDOUT] to Logger[ROOT]
01:22:15.846 [main] TRACE net.abcd.templating.Inliner - Document:
Mój plik logback.groovy jest:
displayStatusOnConsole()
scan('5 minutes') // Scan for changes every 5 minutes.
setupAppenders()
setupLoggers()
def displayStatusOnConsole() {
statusListener OnConsoleStatusListener
}
def setupAppenders() {
appender('STDOUT', ConsoleAppender) {
encoder(PatternLayoutEncoder) {
pattern = "%d{HH:mm:ss.SSS} [%thread] %-5level %-16logger{50} - %msg%n"
}
}
}
def setupLoggers() {
def loglevel = getLogLevel()
println("getLogLevel() returned '${loglevel}'")
root(loglevel, ['STDOUT'])
}
def getLogLevel() {
def mode = System.getProperty('net.abcd.logging.level', '')
println("***********************************************************")
println("")
println("LOGGING MODE PROPERTY 'net.abcd.logging.level' SET TO: [${mode}]")
println("IT CAN BE SET TO: OFF, ERROR, WARN, INFO, DEBUG, TRACE, ALL, INFO")
println("")
println("***********************************************************")
switch(mode.toLowerCase()){
case 'off':
return OFF
case 'error':
return ERROR
case 'warn':
return WARN
case 'info':
return INFO
case 'debug':
return DEBUG
case 'trace':
return TRACE
case 'all':
return ALL
default:
return INFO
}
}
Nie wiem, czy to pomaga, ale JUnit instaluje własny program ładujący klasy, o którym wiadomo, że koliduje z ramami logowania. – llogiq
@llogiq Wiem. .... Więc dlaczego konfiguracja uruchomiona przez raport junit jest poprawna, mimo że poszczególne testy tego nie robią. I jak to naprawić? –