산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> java

Java 로깅 기초와 모범 사례

Java 로깅 기초

이 튜토리얼에서는 예제와 함께 Java 로깅과 다양한 구성 요소를 학습합니다.

Java는 로깅 과정을 통해 로그 메시지와 파일을 생성하고 캡처할 수 있습니다.

Java에서 로깅에는 프레임워크와 API 필요. Java는 java.util.logging 패키지에 내장 로깅 프레임워크 보유.

Log4j, Logback 등 서드파티 프레임워크도 로깅 목적으로 사용 가능.


Java 로깅 구성 요소

아래 그림은 Java 로깅 API(java.util.logging) 핵심 구성 요소와 제어 흐름 나타냄.

Java 로깅 기초와 모범 사례

1. Logger

Logger 클래스는 로깅용 메서드 제공. Logger 클래스 객체 인스턴스화해 메서드 호출로 로깅.

예제:

Logger logger = Logger.getLogger("newLoggerName"); 

Logger 클래스 getLogger() 메서드로 Logger 찾거나 새로 생성. 문자열 인수가 로거 이름 정의.

여기서 동일 이름 기존 Logger 반환 또는 새 Logger 객체 생성.

현재 클래스 후 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 두 특수 레벨 제외.


메시지 로깅

기본적으로 상위 3개 로그 레벨 항상 로깅. 다른 레벨 설정하려면:

logger.setLevel(Level.LogLevel); // 예 logger.setLevel(Level.FINE); 

이 예제에서 FINE 레벨과 그 위 레벨만 로깅 설정. 다른 모든 로그 메시지 드롭.

이제 메시지 로깅 위해 log() 메서드 사용.

logger.log(Level.LogLevel, "log message"); // 예 logger.log(Level.INFO, "This is INFO log level message"); 

원하는 레벨 로깅용 단축 메서드 존재.

logger.info("This is INFO log level message"); logger.warning("This is WARNING log level message"); 

설정 로그 레벨 통과한 모든 로그 요청은 LogRecord로 전달.

참고: 로거 레벨이 null로 설정되면 부모로부터 레벨 상속, 트리 위로 계속.


2. 필터 (Filters)

필터(존재 시) LogRecord 전달 여부 결정. 이름대로 특정 기준 따라 로그 메시지 필터링.

LogRecord는 지정된 기준 통과 시에만 로거에서 로그 핸들러로, 핸들러에서 외부 시스템으로 전달.

// 필터 설정 logger.setFilter(filter); // 필터 가져오기 Filter filter = logger.getFilter(); 

3. 핸들러 (Handlers/Appenders)

로그 핸들러 또는 어펜더가 LogRecord 받아 다양한 타깃으로 내보냄.

Java SE 제공 5가지 내장 핸들러:

핸들러용도
StreamHandlerOutputStream에 쓰기
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(); 

4. 포매터 (Formatters)

핸들러가 Formatter 사용해 LogRecord 객체 문자열로 포맷 후 외부 시스템 내보내기.

Java SE 내장 Formatter 두 가지:

포매터용도
SimpleFormatterLogRecord 문자열 포맷
XMLFormatterLogRecord XML 형태 포맷

핸들러 포맷용 코드:

// 문자열 형태 포맷 handler.setFormatter(new SimpleFormatter()); // XML 형태 포맷 handler.setFormatter(new XMLFormatter()); 

LogManager

LogManager 객체 전역 로깅 정보 추적. 로깅 설정과 로거 인스턴스 읽고 유지.

로그 매니저는 싱글톤, 즉 단일 인스턴스만 인스턴스화됨.

로그 매니저 인스턴스 얻기:

LogManager manager = LogManager.getLogManager(); 

로깅 장점

Java 로깅 장점:

java

  1. Java 연산자 마스터하기: 종류, 문법, 실전 예제
  2. Java 주석: 종류, 사용법, 모범 사례
  3. Java 향상된 for 루프(for-each) 완벽 가이드: 문법, 예제, 비교
  4. Java String 마스터하기: 생성, 메서드, 모범 사례
  5. Java 인터페이스 마스터: 개념, 구현, 모범 사례
  6. Java 익명 내부 클래스 마스터: 정의, 문법, 실전 예제
  7. Java Try-with-Resources 마스터: 자동 리소스 관리 완전 해설
  8. Java 애너테이션 완전 해설: 종류, 배치 위치, 실전 예제
  9. Java Assertion(어설션) 실전 가이드: 버그 조기 발견과 코드 신뢰성 확보
  10. Java Vector 완벽 가이드: 사용법, 특징, ArrayList와의 비교