Как вывести длинную строку с помощью FileHandler?

#java #java.util.logging

#java #java.util.logging

Вопрос:

Для строк, которые не слишком длинные, FileHandler работает нормально. Но если строка прилично длинная, она ничего не записывает в файл журнала. Например, вот код, который пытается записать строку из 50 тысяч символов:

 public class LoggerExample {

    private static final Logger LOGGER = Logger.getLogger(LoggerExample.class.getName());
    public static void main(String[] args) throws SecurityException, IOException {
        FileHandler fileHandler = new FileHandler();
        fileHandler.setFormatter(new SimpleFormatter());
        LOGGER.addHandler(fileHandler);

        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 5000; i  ) {
            sb.append("aaaaaaaaaa");
        }
        LOGGER.info(sb.toString());
    }
}

 

Есть ли способ заставить это работать?

Комментарии:

1. Если я запущу это, он выведет мне 50000 а на консоль… как вы это запускаете?

2. Я запускаю его из Eclipse

3. it doesn't write anything to the log file Вы имеете в виду консоль? Не могли бы вы опубликовать скриншот? Я думаю, что это проблема с выводом Eclipse, потому что я пробовал это с IntelliJ и cmd, оба работают.

4. Я имею в виду файл журнала на диске, поскольку я использую FileHandler

5. @Chin Я скопировал ваш код и запустил его… но он нигде не генерирует файл журнала

Ответ №1:

FileHandler Имеет ограничение, как описано в его документации:

<имя обработчика>.limit указывает приблизительный максимальный объем для записи (в байтах) в любой файл. Если это равно нулю, то предела нет. (По умолчанию без ограничений).

В нем указано значение по умолчанию как no limit, но ограничение устанавливается logging.properties файлом, найденным в используемом каталоге установки JRE / JDK. В моей системе, Java 8 или Java 17, этот файл содержит строку

 java.util.logging.FileHandler.limit = 50000
 

установка предела в 50000.

Возможные решения:

  • установите ограничение в конструкторе FileHandler , например:
 new FileHandler("%h/java%u.log", 0, 1);  // using the default file pattern
 
  • наличие другого файла конфигурации ( logging.properties ) с заданным пределом, указанным java.util.logging.config.file системным свойством.