Auch wenn ich die Gaben unter dem für die Benutzer vergeben haben, müssen zu helfen versucht, bleibt die ursprüngliche Frage unbeantwortet. Es existiert keine tatsächliche Workable-Lösung, um sicherzustellen, dass die logback.groovy-konfigurierte Protokollierung innerhalb der Junit-Tests geehrt wird. Die Tests laden die logback config und es meldet das richtige Niveau und dennoch die eigentliche Testprotokollierung (ausschließlich durch slf4j) jeden oder TRACE EbeneLogger slf4j ist die logback konfiguriert Ebene nicht mit
Ich weiß, andere haben das gleiche Problem festgestellt und es ist sehr ärgerlich, wenn Tests für große Projekte viel länger dauern aufgrund der Konsole Protokollierung viel zu ausführlich. Ich kann nicht werfen Bounties um diese Frage. Ich hoffe, jemand kommt mit einer guten Lösung, die ermöglicht die Testprotokollierung ordnungsgemäß auf verschiedenen Ebenen über eine Systemeigenschaft konfiguriert werden. Für das Projekt können dann verschiedene Konfigurationen erstellt werden, sodass Tests auf unterschiedlichen Protokollierungsschwellenwerten konfiguriert werden können.
Meine Protokollierung wird durch logback durch eine logback.groovy Datei konfiguriert
Nun, wenn mein Maven POM Projekt, das alle anderen Projekte Aggregate gestartet wird, sie die ganze Eigenschaft System übergibt die richtige Protokollstufe einzustellen.
Wenn jedoch die Junit-Tests ausgeführt werden, nimmt der Logger aus irgendeinem Grund nicht die korrekte Stufe an, obwohl die statischen @beforeClass-Testklassen sicherstellen, dass das Logback ordnungsgemäß konfiguriert ist.
Es ist nicht die Logger in den Tests, die das Problem sind, - ja - ja sie auch--, das eigentliche Problem ist, dass die Logger in den Code-Abschnitten, die (alle meine Programme Logger überall) laufen auf die falsche Protokollierungsstufe. Sie erfassen nicht, was die Protokollierung ist, wenn die Programmtests konfiguriert sind.
Die Projekte melden jedoch das korrekte Protokoll, wenn das Logback mit der logback.goovy-Datei initialisiert wird. Die aktuelle Protokollierungsstufe wird jedoch auf TRACE oder ALL gesetzt.
Aus der folgenden Ausgabe ist ersichtlich, dass Logback auf INFO konfiguriert wurde. Aber die erste Projektprotokollierungsanweisung bei TRACE (letzte Zeile) zeigt, dass sie nicht abgeholt wird.
Hilfe.
-------------------------------------------------------
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:
Meine logback.groovy Datei ist:
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
}
}
Ich weiß nicht, ob es hilft, aber JUnit installiert seinen eigenen Klassenlader, von dem bekannt ist, dass er Logging-Frameworks stört. – llogiq
@llogiq Ich weiß. .... Warum startet die Konfiguration von junit korrekt, obwohl die einzelnen Tests nicht funktionieren? Und wie behebt man das? –