Настройка java.util.logging.Logger для записи логов в файл
Быстрый ответ
Для сохранения сообщений лога в файл с применением java.util.logging.Logger
вы можете использовать следующий код:
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
.
Обзор компонентов java.util.logging
Чтобы правильно работать с логированием, следует разобраться в ключевых его компонентах:
- Logger – это ваш инструмент для распространения сообщений логов.
- Handler определяет, куда будут перенаправлены логи.
- Formatter предоставляет логам удобный для чтения формат.
Избегайте вывода в консоль
Убедитесь, что логи записываются исключительно в файл, отключив вывод в консоль следующим образом:
logger.setUseParentHandlers(false);
Добавление временной метки к имени файла лога
Чтобы различать файлы логов, включите в их названия отметки о времени:
String pattern = "yyyyMMddhhmmss";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
String date = simpleDateFormat.format(new Date());
FileHandler fh = new FileHandler("MyLogFile_" + date + ".log");
Настройка форматирования
Вы вправе определить свое собственное форматирование, реализовав интерфейс Formatter
:
class MyFormatter extends Formatter {
@Override
public String format(LogRecord record) {
// Здесь определите свой формат.
}
}
Использование файла конфигурации
Для внешних настроек вы можете задействовать конфигурационный файл logging.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
Выбор уровня логирования
Выберите уровень детализации сообщений для логирования:
logger.setLevel(Level.FINEST); // Настройте под свои нужды
Обработка исключений и очистка
Завершайте работу с логированием тщательно и аккуратно:
fh.close();
Разрешения на доступ к файлам логов
Проверьте разрешения на файлы логов, чтобы предотвратить возможность ошибок.
Визуализация
Настройку java.util.logging.Logger
можно представить как направление потока воды в ведро, где каждая течащая капля – это отдельное сообщение лога:
💧💧💧 > 🪣 [file.txt]
Процесс настройки аналогичен использованию кранов:
- Открыть кран
Logger
:Logger logger = Logger.getLogger("MyLog");
- Настроить
FileHandler
:FileHandler fh = new FileHandler("mylog.txt");
- Подключить
logger
кfh
:logger.addHandler(fh);
Formatter задаёт формат записей, выполняя функцию водяного фильтра:
- Настройка
Formatter
:fh.setFormatter(new SimpleFormatter());
Таким образом, ваши логи будут аккуратно и структурированно записываться в текстовый файл.
Погружение в сложные аспекты
Работа с большими файлами логов
Если логи занимают большой объём, используйте специальную опцию для ротации файлов:
FileHandler fh = new FileHandler("MyLog%g.log", 500 * 1024 * 1024, 10, true);
Наследование логгеров
Управляйте наследованием логов применив код:
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:
-Djava.util.logging.config.file=path/to/logging.properties
Полезные материалы
В заключении предлагаем вам ознакомиться с дополнительными ресурсами:
- Официальная документация Oracle по
java.util.logging
. - Учебник от Vogella с подробным разбором Java Logging API.
- Обсуждение настройки
java.util.logging
на Stack Overflow с практическими примерами перенаправления вывода. - Серия статей Jenkov о механизмах логирования в Java.
- Учебник от DigitalOcean по логированию в Java.
- Полезные знания и инструменты для разработчиков от IBM Developer.