### JUL configuration for Log4jBridgeHandler test
# JVM must be started with to use this file:  -Djava.util.logging.config.file=path_to_this_file


# install bridge but also output JUL-logs to console (order of handler matters!):
handlers = org.apache.logging.log4j.jul.Log4jBridgeHandler, java.util.logging.ConsoleHandler

#org.apache.logging.log4j.jul.Log4jBridgeHandler.sysoutDebug = true
# append given suffix to logger names (e.g. "_JUL"); a dot is prepended automatically
org.apache.logging.log4j.jul.Log4jBridgeHandler.appendSuffix = _JUL
org.apache.logging.log4j.jul.Log4jBridgeHandler.propagateLevels = true

# ConsoleHandler defaults to INFO filtering, but we need all here
java.util.logging.ConsoleHandler.level = ALL
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
java.util.logging.SimpleFormatter.format = JUL:  %1$tT.%1$tL %4$s [%3$s: %2$s]  -  %5$s%6$s%n


# note: JUL levels are  SEVERE, WARNING, INFO, FINE, FINER, FINEST, ALL

# set default JUL logging level (FINER is for entering, exiting etc.)
# out-comment to use default of "INFO" - will be set by level propagation to DEBUG=FINE again
#.level = FINE
org.apache.logging.log4j.jul.Log4jBridgeHandlerTest.level = FINER
# do not log mail-init. (is done on INFO-level) because this would init. JUL before setErr() happens
javax.mail.level = WARNING

# configure (initial) JUL levels differently to log4j-config (and use high levels here)
log4j.Log4jBridgeHandlerTest.propagate1.nested1.level = SEVERE
# this is a logger not directly available in log4j, but the level above and below is defined in log4j:
log4j.Log4jBridgeHandlerTest.propagate2.nested.level = WARNING
