Настройка java.util.logging.Logger для записи логов в файл

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для сохранения сообщений лога в файл с применением java.util.logging.Logger вы можете использовать следующий код:

Java
Скопировать код
Logger logger = Logger.getLogger("MyLog");
try {
    FileHandler fh = new FileHandler("ItsLogTime.log", true);
    logger.addHandler(fh);
    fh.setFormatter(new SimpleFormatter());
    logger.info("Log message");
} catch (SecurityException | IOException e) {
    logger.log(Level.SEVERE, "Произошла ошибка при работе с FileHandler.", e);
}

Данный код позволит вам дописывать в файл MyLogFile.log новые сообщения логов, а форматирование сообщений будет осуществляться стандартным образом с помощью SimpleFormatter.

Кинга Идем в IT: пошаговый план для смены профессии

Обзор компонентов java.util.logging

Чтобы правильно работать с логированием, следует разобраться в ключевых его компонентах:

  • Logger – это ваш инструмент для распространения сообщений логов.
  • Handler определяет, куда будут перенаправлены логи.
  • Formatter предоставляет логам удобный для чтения формат.

Избегайте вывода в консоль

Убедитесь, что логи записываются исключительно в файл, отключив вывод в консоль следующим образом:

Java
Скопировать код
logger.setUseParentHandlers(false);

Добавление временной метки к имени файла лога

Чтобы различать файлы логов, включите в их названия отметки о времени:

Java
Скопировать код
String pattern = "yyyyMMddhhmmss";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
String date = simpleDateFormat.format(new Date());

FileHandler fh = new FileHandler("MyLogFile_" + date + ".log");

Настройка форматирования

Вы вправе определить свое собственное форматирование, реализовав интерфейс Formatter:

Java
Скопировать код
class MyFormatter extends Formatter {
    @Override
    public String format(LogRecord record) {
        // Здесь определите свой формат.
    }
}

Использование файла конфигурации

Для внешних настроек вы можете задействовать конфигурационный файл logging.properties:

properties
Скопировать код
java.util.logging.FileHandler.pattern = %h/java%u.log
java.util.logging.FileHandler.limit = 50000
java.util.logging.FileHandler.count = 1
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter

Выбор уровня логирования

Выберите уровень детализации сообщений для логирования:

Java
Скопировать код
logger.setLevel(Level.FINEST); // Настройте под свои нужды

Обработка исключений и очистка

Завершайте работу с логированием тщательно и аккуратно:

Java
Скопировать код
fh.close();

Разрешения на доступ к файлам логов

Проверьте разрешения на файлы логов, чтобы предотвратить возможность ошибок.

Визуализация

Настройку java.util.logging.Logger можно представить как направление потока воды в ведро, где каждая течащая капля – это отдельное сообщение лога:

💧💧💧 > 🪣 [file.txt]

Процесс настройки аналогичен использованию кранов:

  1. Открыть кран Logger: Logger logger = Logger.getLogger("MyLog");
  2. Настроить FileHandler: FileHandler fh = new FileHandler("mylog.txt");
  3. Подключить logger к fh: logger.addHandler(fh);

Formatter задаёт формат записей, выполняя функцию водяного фильтра:

  1. Настройка Formatter: fh.setFormatter(new SimpleFormatter());

Таким образом, ваши логи будут аккуратно и структурированно записываться в текстовый файл.

Погружение в сложные аспекты

Работа с большими файлами логов

Если логи занимают большой объём, используйте специальную опцию для ротации файлов:

Java
Скопировать код
FileHandler fh = new FileHandler("MyLog%g.log", 500 * 1024 * 1024, 10, true);

Наследование логгеров

Управляйте наследованием логов применив код:

Java
Скопировать код
Logger parentLogger = Logger.getLogger("com.myapp");
Logger childLogger = Logger.getLogger("com.myapp.module");
childLogger.setUseParentHandlers(true);

Понимание уровней логирования

Декодирование стандартных уровней логирования:

  • SEVERE: серьёзная ошибка
  • WARNING: предупреждение
  • INFO: информационное сообщение
  • CONFIG: конфигурация системы
  • FINE, FINER, FINEST: детальное логирование

Параметры JVM для логирования

Настройту логирование при помощи параметров запуска JVM:

sh
Скопировать код
-Djava.util.logging.config.file=path/to/logging.properties

Полезные материалы

В заключении предлагаем вам ознакомиться с дополнительными ресурсами:

  1. Официальная документация Oracle по java.util.logging.
  2. Учебник от Vogella с подробным разбором Java Logging API.
  3. Обсуждение настройки java.util.logging на Stack Overflow с практическими примерами перенаправления вывода.
  4. Серия статей Jenkov о механизмах логирования в Java.
  5. Учебник от DigitalOcean по логированию в Java.
  6. Полезные знания и инструменты для разработчиков от IBM Developer.