1. 소개

Java에서 예외를 처리할 때 우리는 자주 로깅하거나 단순히 스택 추적을 표시합니다. 그러나 때때로 우리는 스택 추적을 인쇄하는 것을 원하지 않습니다. 스택 추적을 파일, 데이터베이스에 기록하거나 네트워크를 통해 전송해야 할 수도 있습니다.

이러한 목적을 위해 스택 추적을 문자열 로 갖는 것은 매우 유용합니다. 불행하게도 Java는 이를 직접 수행할 수 있는 매우 편리한 방법을 제공하지 않습니다.

2. Core Java로 변환

핵심 라이브러리부터 시작하겠습니다.

Exception 클래스 의 printStackTrace() 함수 는 PrintStream 또는 PrintWriter 중 하나의 매개변수를 사용할 수 있습니다 . 따라서 StringWriter 를 사용 하여 스택 추적을 String 으로 인쇄하는 것이 가능합니다 .

StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);

그런 다음 sw.toString() 을 호출하면 스택 추적이 String 으로 반환됩니다 .

3. Commons-Lang을 이용한 변환

이전 방법은 코어 Java를 사용하여 스택 추적을 문자열 로 변환하는 가장 간단한 방법 이지만 여전히 약간 번거롭습니다. 다행스럽게도 Apache Commons-Lang 은 작업을 수행하는 기능을 제공합니다.

Apache Commons-Lang은 예외 작업에 사용할 수 있는 클래스를 포함하여 Java API의 핵심 클래스에 없는 많은 기능을 제공하는 매우 유용한 라이브러리입니다.

먼저 프로젝트 구성부터 시작하겠습니다. Maven을 사용할 때 pom.xml 에 다음 의존성을 추가하기만 하면 됩니다 .

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.12.0</version>
</dependency>

그런 다음 우리의 경우 가장 흥미로운 클래스는 예외 를 조작하는 기능을 제공하는 ExceptionUtils 입니다. 이 클래스를 사용 하면 예외 에서 문자열 로 스택 추적을 가져오는 것은 매우 간단합니다.

String stacktrace = ExceptionUtils.getStackTrace(e);

4. 결론

예외의 스택 추적을 문자열 로 가져오는 것은 어렵지 않지만 직관적이지는 않습니다. 이 기사에서는 핵심 Java를 사용하거나 Apache Commons-Lang을 사용하는 두 가지 방법을 제시합니다.

Java 9는 작업을 더 쉽게 만들어주는 새로운 StackWalking API 를 제공할 것임을 명심하십시오.

항상 그렇듯이 코드 샘플은 여기 GitHub 에서 찾을 수 있습니다 .

Generic footer banner