在我的项目类中,我使用了java.util.logging。Logger,并在我的代码中添加了各种日志输出,使用了各种日志级别。
src/main/java/Run.java
import java.util.logging.Level;
import java.util.logging.Logger;
public class Run{
public static void main( String args[] ){
System.out.println("Hello World");
logger.log(Level.CONFIG, "Just some config info");
Logger logger = Logger.getLogger(Run.class.getName());
logger.log(Level.INFO, "Just logging some info");
logger.log(Level.FINE, "Fine logging");
logger.log(Level.FINER, "Finer logging");
logger.log(Level.WARNING, "This is a warning log!");
}
}
目前,当我运行gradle-i test
时,所有具有级别的日志消息。显示定义的INFO
,但没有输出任何配置、警告或精细消息。
我已经尝试更新我的build.gradle文件,这样:
apply plugin: 'java'
apply plugin:'application'
mainClassName = "Run"
repositories {
mavenCentral()
}
dependencies {
testCompile "junit:junit:4.11"
}
run{
systemProperties = ['java.util.logging.config.file' : 'logging.properties']
}
我包括:
systemProperties = ['java.util.logging.config.file' : 'logging.properties']
然后创建/src/main/resource/logging.properties
handlers= java.util.logging.ConsoleHandler
.level= CONFIG
java.util.logging.ConsoleHandler.level = FINER
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
正在运行:
gradle run
我得到:
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:run
Hello World
BUILD SUCCESSFUL
当运行gradle时,我运行我得到:成功启动了进程“command”/Library/Java/JavaVirtualMachines/jdk1.8.0\u 20。jdk/Contents/Home/bin/Java“你好,世界:运行(线程[main,5,main])完成。耗时0.202秒。
BUILD SUCCESSFUL
即,没有日志信息。然而,对系统进行了注释。运行任务中的属性并重新运行gradle-i run i get:
Successfully started process 'command '/Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home/bin/java''
Hello World
Nov 05, 2014 12:07:42 PM Run main
INFO: Just logging some info
Nov 05, 2014 12:07:42 PM Run main
WARNING: This is a warning log!
:run (Thread[main,5,main]) completed. Took 0.229 secs.
BUILD SUCCESSFUL
信息和警告级别日志,但不是精细或更精细的日志。
TLDR;
我怎么得到配置,好吗
几个选项(我个人更喜欢选项2.2):
1) 自定义日志记录。属性文件:
Java日志API在
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中添加默认日志级别:
public static Level defaultLevel = Level.INFO;
获取日志级别属性的值:
String logLevel = System.getProperty("logLevel");
并在记录器中设置定义的级别:
Logger logger = Logger.getLogger(Run.class.getName());
logger.setLevel(logLevel.isEmpty() ? defaultLevel : Level.parse(logLevel));
2.1)创建一个新的控制台处理程序,并从父处理程序关闭打印
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
您可以控制显示哪些消息。
问题内容: Python提供了一种很好的方法来获取渴望的迭代的长度。但是对于以生成器理解和函数表示的惰性可迭代对象,我找不到类似的东西。当然,编写类似以下内容并不难: 但是我无法摆脱自己重新设计自行车的感觉。 (当我键入函数时,我想到了一个想法:也许确实没有这样的函数,因为它“破坏了”其参数。不过,对于我的情况而言,这不是问题)。 PS:关于第一个答案-是的,类似的方法也可以工作,但是会大大增加内
我试图将jetty服务器详细程度级别从Info更改为Debug。 这是当前设置的文件: 怎么做呢?
问题内容: 我对通过Keras API的简单性构建强化学习模型感兴趣。不幸的是,我无法提取相对于权重的输出梯度(不是误差)。 关于如何计算模型输出相对于每一层的权重的梯度的任何想法将被理解。 问题答案: 要使用Keras获得相对于权重的模型输出的梯度,您必须使用Keras后端模块。我创建了这个简单的示例来确切说明该怎么做: 为了计算梯度,我们首先需要找到输出张量。对于模型的输出(我最初的问题是什么
本文向大家介绍软件测试面试题----怎么测电梯?相关面试题,主要包含被问及软件测试面试题----怎么测电梯?时的应答技巧和注意事项,需要的朋友参考一下 问题是:怎么测电梯 前提条件是:这是一道软件测试工程师面试题,而非真正的电梯测试人员的面试题 第二个前提:我没有需求文档,但我了解电梯的基本业务功能 思路:把电梯当作一个我了解基本业务功能,却没有需求文档的软件来进行测试。也就是说这里考察两点: 第
我正在使用设置为log level=INFO的wildfly21。在部署的代码中有许多记录器。调试语句。 例如 调试语句没有正确记录到文件中,因为日志记录级别设置为INFO。 我的问题是关于logger的性能成本。调试。 在代码中保留调试语句是否有任何性能代价。或者是文件I/O中的实际成本,因此,在需要时将调试语句留作故障排除之用并无害处。
下面的问题对很多人来说可能很愚蠢,因为它应该有一个简单的解决方案,但我是Spring框架的初学者,我一直在搜索和测试许多方法,但都没有成功。 因此,我需要实现基于Spring的Web服务的日志记录。Maven用于依赖项,带有依赖项,而不是整个starter web starter。 我尝试使用log4j,添加了一个依赖项和配置文件,它确实生成了一个日志文件,但只用于记录器本身的初始化,并且没有记录