Java – logger slf4j does not have the level configured with logback
My log record is through logback Configuration of logback using groovy files
Now, when my Maven POM project aggregates all other projects, it passes all system properties to set the correct logging level
However, when JUnit test runs, for some reasons, the logger will not receive the correct level even if the test class static @ beforeclass ensures that the log configuration is correct
The loggers in the test are not a problem, and - and so are - they - the real problem is that the loggers running code segments (my program loggers are everywhere) are set to the wrong logging level When the configurator tests, they do not receive logging
However, use logback The project report is correct when logback initialization is performed on the goovy file However, the actual record level is set to trace or all
From the output below, it is obvious that logback is configured as info However, the first item log record in trace (the last line) indicates that it has not been extracted
Please help me.
------------------------------------------------------- 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 ch.qos.logback.classic.gaffer.ConfigurationDelegate@1e8c3cb - Added status listener of type [ch.qos.logback.core.status.OnConsoleStatusListener] 01:22:15,290 |-INFO in ch.qos.logback.classic.gaffer.ConfigurationDelegate@1e8c3cb - Setting ReconfigureOnChangeFilter scanning period to 5 minutes 01:22:15,290 |-INFO in ReconfigureOnChangeFilter{invocationCounter=0} - Will scan for changes in [[C:\Users\ABDC\Drop@R_67_2419@\workspace\abcd\AbcdTemplating\conf\logback.groovy]] every 300 seconds. 01:22:15,290 |-INFO in ch.qos.logback.classic.gaffer.ConfigurationDelegate@1e8c3cb - Adding ReconfigureOnChangeFilter as a turbo filter 01:22:15,312 |-INFO in ch.qos.logback.classic.gaffer.ConfigurationDelegate@1e8c3cb - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender] 01:22:15,316 |-INFO in ch.qos.logback.classic.gaffer.ConfigurationDelegate@1e8c3cb - 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 ch.qos.logback.classic.gaffer.ConfigurationDelegate@1e8c3cb - Setting level of logger [ROOT] to INFO 01:22:15,532 |-INFO in ch.qos.logback.classic.gaffer.ConfigurationDelegate@1e8c3cb - Attaching appender named [STDOUT] to Logger[ROOT] 01:22:15.846 [main] TRACE net.abcd.templating.Inliner - Document:
My logback Groovy files are:
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,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 } }
Solution
I have a similar problem
import ch.qos.logback.classic.Level; import ch.qos.logback.classic.Logger; import org.slf4j.LoggerFactory; ... static Logger logger; static{ // Logger.ROOT_LOGGER_NAME == "ROOT" logger = ((Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME)); logger.setLevel(Level.INFO); }
…
I think in your case, somehow, a library uses its own consoleprovider instance with a name other than "stdout" I hope setting the root log level can solve the problem
root(loglevel,['ROOT']);