Several parameters ( I personally prefer option 2.2 ):
1) Custom logging.properties file:
The Java logging API has a default logging configuration file in <JRE_HOME>/lib/logging.properties . You can use your own configuration file by setting the JVM property java.util.logging.config.file .
handlers = java.util.logging.ConsoleHandler Run.handlers = java.util.logging.ConsoleHandler Run.level = FINER Run.useParentHandlers = false java.util.logging.ConsoleHandler.level = ALL java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
You must set useParentHandlers = false to avoid duplicate fingerprints of parent handlers.
1.1) Set the property above with an absolute path
Didn't even try; -)
1.2) Download the user file as follows: Run.java
Download it in Run.java as follows:
InputStream inputStream = Run.class.getResourceAsStream("mylogging.properties"); try { LogManager.getLogManager().readConfiguration(inputStream); } catch(Exception e) { e.printStackTrace(); }
2) Custom system property (i.e.: logLevel )
Define systemProperty in build.gradle :
run { systemProperty 'logLevel', System.getProperty('logLevel') }
Add defaultLogLevel to Run.java :
public static Level defaultLevel = Level.INFO;
Get the value of the logLevel property:
String logLevel = System.getProperty("logLevel");
And set the given level in the log:
Logger logger = Logger.getLogger(Run.class.getName()); logger.setLevel(logLevel.isEmpty() ? defaultLevel : Level.parse(logLevel));
2.1) Create a new ConsoleHandler and disconnect printing from parent handlers
System.out.println(Run.class.getName()); Logger logger = Logger.getLogger(Run.class.getName()); logger.setLevel(logLevel.isEmpty() ? defaultLevel : Level.parse(logLevel)); Handler consoleHandler = new ConsoleHandler(); consoleHandler.setLevel(logLevel.isEmpty() ? defaultLevel : Level.parse(logLevel)); logger.addHandler(consoleHandler); logger.setUseParentHandlers(false);
2.2) Find the parent ConsoleHandler and set a specific level
Logger topLogger = Logger.getLogger(""); Handler consoleHandler = null; for (Handler handler : topLogger.getHandlers()) { if (handler instanceof ConsoleHandler) { //found the console handler consoleHandler = handler; break; } } if (consoleHandler == null) { // not found, create a new one consoleHandler = new ConsoleHandler(); topLogger.addHandler(consoleHandler); } //set the console handler level consoleHandler.setLevel(logLevel.isEmpty() ? defaultLevel : Level.parse(logLevel));
In this case, gradle run displays messages above the default level (INFO). Via
gradle run -DlogLevel=FINE
You can control which messages are displayed.