У меня есть java-проект, для сборки которого я использую maven. Я использую 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
НЕ работает. Я как бы ожидал, что этот не сработает, потому что это относительный путь. Кто-нибудь знает, как я могу разрешить имя относительного пути в файле свойств?
Решение
Мне нужно было переместить .level
наверх, вот так:
logger.properties
.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);
}
}