Невозможно настроить ведение журнала для исполняемого банку
Это похоже на этот question, хотя я уже помещал logging.properties
в исполняемую банку и не работал.
У меня есть класс (ReportGenerator), который имеет следующее:
Logger logger = Logger.getLogger(ReportGenerator.class.getName());
logger.log(Level.INFO, "LOG THIS");
Я использую Netbeans, поэтому я помещаю файл logging.properties
в путь src/main/resources
. Он имеет это (между прочим):
# default file output is in user home directory.
java.util.logging.FileHandler.pattern = /my/folder/reports.log
java.util.logging.FileHandler.limit = 50000
java.util.logging.FileHandler.count = 10
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
# Limit the message that are printed on the console to INFO and above.
java.util.logging.ConsoleHandler.level = OFF
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
############################################################
# Facility specific properties.
# Provides extra control for each logger.
############################################################
# For example, set the com.xyz.foo logger to only log SEVERE
# messages:
com.mypackage.ReportGenerator.level = ALL
Ящик генерируется с использованием Maven, когда он распадается, я вижу, что logging.properties
находится в основной папке банки. Наряду с папкой com
, где находится мой класс.
-com
-mypackage
-ReportGenerator
logging.properties
...other things
Когда я запускаюсь с консоли:
java - jar MyReportsJar.jar
Он показывает мне журналы через консоль. Я хочу записать его в файл, который я установил в logging.properties.
Что я делаю неправильно?
Как мне это сделать без установки параметра JVM java.util.logging.config.file
?
Ответы
Ответ 1
После нескольких дней против этого и чтения многих ресурсов в Интернете я придумал это решение:
Мне нужно изменить свойства ведения журнала LogManager в программе. Я могу использовать файл logging.properties
, упакованный в .jar
следующим образом:
LogManager.getLogManager().readConfiguration(ReportGenerator.class.getClassLoader().getResourceAsStream("logging.properties"));
И затем я могу сделать то же самое, что и раньше, чтобы получить журнал и журнал:
Logger logger = Logger.getLogger(ReportGenerator.class.getName());
logger.log(Level.INFO, "LOG THIS");
Но я нашел очень полезным, что вы можете указать другой файл logging.properties
во время выполнения, поэтому мой последний код:
String logFile = System.getProperty("java.util.logging.config.file");
if(logFile == null){
LogManager.getLogManager().readConfiguration(ReportGenerator.class.getClassLoader().getResourceAsStream("logging.properties"));
}
Logger logger = Logger.getLogger(ReportGenerator.class.getName());
logger.log(Level.INFO, "LOG THIS");
Таким образом, если я выполняю jar как это:
java -jar MyReportsJar.jar
Он использует внутренний файл logging.properties
.
Но если я выполню:
java -Djava.util.logging.config.file=<external-logging.properties> -jar MyReportsJar.jar
он использует внешний файл logging.properties
.