Урок 18: Логирование
В этом уроке мы рассмотрим, как использовать логирование в Java для отслеживания выполнения программы и выявления ошибок.
Основы логирования
Логирование позволяет записывать информацию о выполнении программы. В Java для логирования часто используется библиотека java.util.logging
. Пример простого логирования:
import java.util.logging.Logger;
public class LoggingExample {
private static final Logger logger = Logger.getLogger(LoggingExample.class.getName());
public static void main(String[] args) {
logger.info("Программа запущена");
try {
int result = 10 / 0;
} catch (ArithmeticException e) {
logger.severe("Ошибка: " + e.getMessage());
}
logger.info("Программа завершена");
}
}
Результат выполнения
INFO: Программа запущена
SEVERE: Ошибка: / by zero
INFO: Программа завершена
Настройка логирования
Логирование можно настраивать, используя конфигурационные файлы или программные методы. Пример настройки логирования:
import java.util.logging.ConsoleHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;
public class LoggingConfigExample {
private static final Logger logger = Logger.getLogger(LoggingConfigExample.class.getName());
public static void main(String[] args) {
ConsoleHandler handler = new ConsoleHandler();
handler.setLevel(Level.ALL);
handler.setFormatter(new SimpleFormatter());
logger.addHandler(handler);
logger.setLevel(Level.ALL);
logger.info("Логирование настроено");
logger.warning("Это предупреждение");
logger.severe("Это серьезная ошибка");
}
}
Результат выполнения
INFO: Логирование настроено
WARNING: Это предупреждение
SEVERE: Это серьезная ошибка
Упражнения
Упражнение 1: Логирование информации о пользователе
Напишите программу, которая принимает имя и возраст пользователя и логирует эти данные на разных уровнях (INFO, WARNING).
Решение:
import java.util.logging.Logger;
public class UserLogging {
private static final Logger logger = Logger.getLogger(UserLogging.class.getName());
public static void main(String[] args) {
String name = "Анна";
int age = 25;
logger.info("Имя пользователя: " + name);
if (age < 18) {
logger.warning("Возраст пользователя меньше 18: " + age);
} else {
logger.info("Возраст пользователя: " + age);
}
}
}
Объяснение: Программа логирует имя пользователя на уровне INFO и возраст на уровне WARNING, если он меньше 18. В остальных случаях возраст логируется на уровне INFO.
Упражнение 2: Логирование ошибок при чтении файла
Напишите программу, которая читает данные из файла и логирует любые ошибки, возникающие при чтении файла.
Решение:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.logging.Logger;
public class FileReadingLogging {
private static final Logger logger = Logger.getLogger(FileReadingLogging.class.getName());
public static void main(String[] args) {
try (BufferedReader br = new BufferedReader(new FileReader("example.txt"))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
logger.severe("Ошибка при чтении файла: " + e.getMessage());
}
}
}
Объяснение: Программа пытается прочитать файл example.txt
и логирует ошибку на уровне SEVERE, если возникает исключение IOException
.