English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
이 튜토리얼에서는 예제를 통해 Java 로그 기록 및 그 다양한 구성 요소를 배울 것입니다.
Java는 로그 기록 프로세스를 통해 로그 메시지와 파일을 생성하고 캡처할 수 있게 합니다.
Java에서는 로그 기록에 프레임워크와 API가 필요합니다. Java는 java.util.logging 패키지에서 내장된 로그 기록 프레임워크를 가지고 있습니다.
또한 제3자 프레임워크(예: Log4j, Logback 등을 사용하여 로그 기록.
아래는 Java Logging API (java.util.logging)의 핵심 구성 요소와 지정된 플로우를 보여줍니다.
Logger 클래스는 로그 기록 메서드를 제공합니다. Logger 클래스에서 객체를 인스턴스화하고 메서드를 호출하여 기록할 수 있습니다.
예제를 들어보겠습니다.
Logger logger = Logger.getLogger("newLoggerName");
Logger类的getLogger()方法用于查找或创建新的Logger。字符串参数定义logger的名称。
여기서는 새로운 Logger 객체를 생성하거나 동일한 이름을 가진 Logger 객체를 반환합니다.
convention에 따라, 현재 클래스 뒤에 class.getName()를 사용하여 Logger를 정의합니다.
Logger logger = Logger.getLogger(MyClass.class.getName());
주의:전달된 이름이 null이면, 이 메서드는 NullPointerException을 투척합니다.
각 Logger는 로그 메시지 중요성을 결정하는 등급을 가지고 있습니다. 다음과 같이 있습니다:7기본 로그 등급:
로그 등급(내림차순) | 사용 |
---|---|
SEVERE | 심각한 장애 |
WARNING | 경고 메시지, 잠재적인 문제 |
INFO | 일반적인 실행 시간 정보 |
CONFIG | 구성 정보 |
FINE | 보통의 개발자 정보(트래킹 메시지) |
FINER | 자세한 개발자 정보(트래킹 메시지) |
FINEST | 매우 자세한 개발자 정보(트래킹 메시지) |
OFF | 모든 등급의 로그 기록을 닫기(아무 내용도 포착하지 않음) |
ALL | 모든 등급의 로그 기록을 열기(모든 내용을 포착) |
각 로그 등급은 중요성을 결정하는 데 사용되는 정수 값을 가지고 있습니다. OFF와 ALL이라는 두 가지 특별한 로그 등급을 제외하고.
기본적으로, 항상 최초 세 가지 로그 등급이 기록됩니다. 다른 등급을 설정하려면 다음과 같은 코드를 사용할 수 있습니다:
logger.setLevel(Level.LogLevel); // 예제 logger.setLevel(Level.FINE);
이 예제에서는 Level.FINE과 그 이상의 등급만이 로그 기록으로 설정되어 있습니다. 다른 모든 로그 메시지를 제거합니다.
지금은 일기 메시지를 기록하려고 합니다. 이 log() 메서드를 사용합니다.
logger.log(Level.LogLevel, "log message"); // 예제 logger.log(Level.INFO, "This is INFO log level message");
필요한 레벨을 기록하기 위한 몇 가지 약자 메서드가 있습니다.
logger.info("INFO 로그 레벨의 메시지입니다"); logger.warning("WARNING 로그 레벨의 메시지입니다");
그런 다음, 설정된 로그 레벨을 통해 모든 로그 요청이 다음으로 전달됩니다LogRecord.
주의:만약 일기록자의 레벨이 null로 설정되면, 그 레벨은 부모에서 상속됩니다.
필터(있는 경우)가 LogRecord이 이 로그 기록을 전달할지 여부를 결정합니다. 그 이름에서 알 수 있듯이, 특정 기준에 따라 로그 메시지를 필터링합니다.
만약LogRecord지정된 조건에 따라 기록자에서 로그 처리기로 전달되고, 로그 처리기에서 외부 시스템으로 전달됩니다.
// 필터 설정 logger.setFilter(filter); // 필터 가져오기 Filter filter = logger.getFilter();
로그 처리기나 추가 프로그램은 다음을 수신합니다LogRecord그리고 다양한 목표로 내보내기
Java SE는 다음과 같이 제공합니다5개의 내장 처리기가 있습니다:
처리기 | 사용 |
---|---|
StreamHandler | OutputStream에 기록 |
ConsoleHandler | 컨솔에 기록 |
FileHandler | 파일에 기록 |
SocketHandler | 원격 TCP 포트에 기록 |
MemoryHandler | 메모리에 기록 |
처리기는LogRecord필터에 전달하여 외부 시스템으로 전달할 수 있는지 다시 확인합니다.
새로운 처리기를 추가하려면 다음 코드를 사용합니다:
logger.addHandler(handler); // 예제 Handler handler = new ConsoleHandler(); logger.addHandler(handler);
처리기를 제거하려면 다음 코드를 사용합니다:
logger.removeHandler(handler); // 예제 Handler handler = new ConsoleHandler(); logger.addHandler(handler); logger.removeHandler(handler);
한 기록자는 여러 처리기를 가질 수 있습니다. 모든 처리기를 가져오기 위해 다음 코드를 사용합니다:
Handler[] handlers = logger.getHandlers();
처리기는 다음과 같이 사용할 수 있습니다Formatter적용LogRecord객체정렬문자열로 변환한 후 외부 시스템으로 내보내기
Java SE에 두 가지 내장된Formatter:
포맷 프로그램 | 사용 |
---|---|
SimpleFormatter | LogRecord을 문자 형식으로 포맷합니다 |
XMLFormatter | LogRecord을 XML 형식으로 포맷합니다 |
다음 코드를 사용하여 처리기를 포맷할 수 있습니다:
// 문자 형식으로 포맷합니다 handler.setFormatter(new SimpleFormatter()); // XML 형식으로 포맷합니다 handler.setFormatter(new XMLFormatter());
로그 관리객체 추적의 글로벌 기록 정보를 읽고 유지합니다. 이는 로그 기록 설정과 레코드 인스턴스를 유지합니다.
로그 관리자는 싱글턴입니다. 이는 단 한 개의 인스턴스가 생성된다는 의미입니다.
로그 관리자 인스턴스를 얻으려면 다음 코드를 사용합니다:
LogManager manager = new LogManager();
Java 로그 사용의 몇 가지 장점입니다.
프로그램의 흐름을 모니터링하는 데 도움을 줍니다
가능한 모든 오류를 캡처하는 데 도움을 줍니다
문제 진단 및 디버깅을 지원합니다