我有一个使用maven 构建的java 项目。
我在用java.util.logging.Logger
在我的项目中并想使用logger.properties
文件(不是命令行)。
我创建了一个logger.properties
像这样的文件:
handlers=java.util.logging.FileHandler, java.util.logging.ConsoleHandler
.level=WARNING
java.util.logging.SimpleFormatter.format=[%4$s] %5$s %n
java.util.logging.config.file="../../results/api.log"
以下是我遇到的问题:
-
java.util.logging.SimpleFormatter.format
工作中。当我在此处更改格式时,我会立即在项目中看到更改。所以我知道至少我正确地导入了文件。
-
.level
不管用。我尝试将其更改为info
, finest
, warning
等等,但在我更改它之后,即使我告诉它不要显示 INFO,我仍然会看到所有 INFO 消息。
-
java.util.logging.config.file
不管用。我有点期望这个不起作用,因为它是一条相对路径。有人知道如何解析属性文件中的相对路径名吗?
Solution
我需要移动.level
到顶部,像这样:
记录器属性
.level=WARNING
handlers=java.util.logging.FileHandler, java.util.logging.ConsoleHandler
java.util.logging.SimpleFormatter.format=[%4$s] %5$s %n
然后,为了将结果保存到“api.log”,我在代码中执行了以下操作:
RequestHelper.java
import org.apache.commons.io.FilenameUtils;
public class RequestHelper {
private static final Logger LOGGER = Logger.getLogger( RequestHelper.class.getName() );
protected RequestHelper() {
//SET LOGGER TO OUTPUT TO "../../results/api.log"
//Logs will ALSO output to console.
String result_file = getNormalizedAbsolutePath("../../results/api.log");
Handler fh = new FileHandler(result_file);
Logger.getLogger("").addHandler(fh);
}
public static String getNormalizedAbsolutePath(String fileName) {
String path;
File file = new File(fileName);
try {
path = file.getCanonicalPath();
} catch (IOException e) {
LOGGER.warning("Error while computing the canonical path of file: " + fileName);
path = file.getAbsolutePath();
}
return FilenameUtils.normalize(path);
}
}
只是一个猜测。从文档中:
假定名称以“.level”结尾的所有属性都定义记录器的日志级别。因此,“foo.level”为名为“foo”的记录器以及(递归地)命名层次结构中的任何子记录器定义了日志级别。日志级别按照属性文件中定义的顺序应用。因此,树中子节点的级别设置应位于其父节点的设置之后。
尝试设置.level
首先,在定义任何处理程序之前。如果您先设置根记录器级别,则之后定义的记录器将继承根日志级别。
Also:
属性“配置”。此属性旨在允许运行任意配置代码。
java.util.logging.config.file
是系统属性,在配置文件中不起作用。尝试仅使用“配置”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)