Подтвердить что ты не робот

Невозможно настроить ведение журнала для исполняемого банку

Это похоже на этот 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?

4b9b3361

Ответ 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.