几个选项(我个人更喜欢选项2.2):
1)自定义logging.properties文件:
Java Logging API在< JRE_HOME> /lib/logging.properties上有一个默认的日志记录配置文件.您可以使用自己的配置文件设置JVM属性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
您必须设置useParentHandlers = false以避免从父处理程序获取重复打印.
1.1)使用绝对路径设置上面的属性
甚至没试过;-)
1.2)在Run.java中按如下方式加载自定义文件
在Run.java中按如下方式加载它:
InputStream inputStream = Run.class.getResourceAsStream("mylogging.properties");
try {
LogManager.getLogManager().readConfiguration(inputStream);
} catch(Exception e) {
e.printStackTrace();
}
2)自定义系统属性(即:logLevel)
在build.gradle中定义systemProperty:
run {
systemProperty 'logLevel',System.getProperty('logLevel')
}
在Run.java中添加defaultLogLevel:
public static Level defaultLevel = Level.INFO;
获取logLevel属性的值:
String logLevel = System.getProperty("logLevel");
并在logger中设置定义的级别:
Logger logger = Logger.getLogger(Run.class.getName());
logger.setLevel(logLevel.isEmpty() ? defaultLevel : Level.parse(logLevel));
2.1)从父处理程序创建一个新的ConsoleHandler并关闭打印
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)查找父ConsoleHandler并设置定义的级别
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));
这样,gradle run会产生高于默认级别(INFO)的消息.同
gradle run -DlogLevel=FINE
您可以控制显示哪些消息.