[JAVA]JAVA실무

[JAVA]Log4j vs e.printStackTrace

greeniti 2025. 4. 23. 19:24

e.printStackTrace()는 예외의 스택 트레이스를 출력하는 간단한 방법이지만, 실제 서비스나 프로덕션 코드에서는 로깅 프레임워크를 사용하는 것이 더 좋습니다. 

 

e.printStackTrace()는 Java에서 예외가 발생했을 때 스택 트레이스를 콘솔에 출력하는 방법입니다. 보통 디버깅 용도로 사용되며, 예외가 어디서 발생했는지 추적하는 데 유용합니다. 

하지만 실제 서비스 코드나 배포 환경에서는 사용을 피하는 게 좋습니다, 이유는:

  • 로깅 설정 제어 불가 (출력 레벨, 출력 위치 등)
  • 파일로 기록되지 않음
  • 정리되지 않은 콘솔 출력으로 관리 어려움

🔁 대체 방법

✅ 1. 로깅 프레임워크 사용 (추천)

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

private static final Logger logger = LoggerFactory.getLogger(MyClass.class);

try {
    // 예외 발생 가능 코드
} catch (Exception e) {
    logger.error("에러 발생", e);  // 스택트레이스도 같이 출력됨
}

✅ 2. 예외 메시지만 출력

try {
    // 예외 발생 가능 코드
} catch (Exception e) {
    System.err.println("에러 메시지: " + e.getMessage());
}

필요에 따라 e.printStackTrace()를 임시로 쓸 수는 있지만, 로깅으로 전환하는 게 장기적으로 안정성과 유지보수 측면에서 훨씬 좋아요.

 

1. Log4j 사용

import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;

private static final Logger logger = LogManager.getLogger(MyClass.class);

try {
    // 코드
} catch (Exception e) {
    logger.error("예외 발생", e);
}

2. SLF4J + Logback 사용

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

private static final Logger logger = LoggerFactory.getLogger(MyClass.class);

try {
    // 코드
} catch (Exception e) {
    logger.error("예외 발생", e);
}

이렇게 하면 콘솔뿐 아니라 파일, 외부 시스템 등 원하는 곳에 로그를 남길 수 있고, 로그 레벨 설정도 가능해 유지보수에 유리합니다.