2012-09-19 1 views
2

throwable/exception의 전체 스택 추적을 ByteBuffer (Java의 경우)로 변환하는 가장 효율적인 방법은 무엇입니까?Java : throwable/exception의 전체 스택 추적을 ByteBuffer로 변환하는 가장 효율적인 방법은 무엇입니까?

특히 전체 예외를 데이터베이스에 기록해야합니다. Thread.currentThread(). getStackTrace()는 StackTraceElement [] 배열의 목록을 반환합니다.

그런 다음 Throwable 클래스에 printStackTrace() 메서드가 있습니까?

+0

당신은 단지 *하지 * 사용 예외 던지는 성능이 중요한 곳 코드를. 스택 추적을 가져오고 서식을 지정하는 것은 어쨌든 매우 효율적이지 않습니다. – gpeche

+1

@ gpeche - 예외를 피하는 것이 좋은 제안이라고 생각하지 않습니다. 타사 라이브러리를 다루는 경우 옵션이 될 수도 없습니다. 코드가 느리고 성능이 문제가 되더라도 Exceptions 사용을 중단하기 전에 먼저 프로파일 링하고 최적화하는 데 수백만 가지가 있습니다. 속도가 느리지 만 느리지는 않습니다. –

+0

@Jesse Webb 사실 대안에 예외 처리를 선호합니다. "throwable/exception의 전체 스택 추적을 ByteBuffer로 변환하는 가장 효율적인 방법"은 나에게별로 의미가 없습니다. 'System.out'에 쓰는 가장 효율적인 방법에 대해 질문하는 것과 조금 비슷합니다. – gpeche

답변

6

, 이것은 당신이 필요해야한다 :

ByteArrayOutputStream os = new ByteArrayOutputStream(); 
ex.printStackTrace(new PrintStream(os)); 
ByteBuffer bb = ByteBuffer.wrap(os.toByteArray()); 
1

apache 공유에서 ExceptionUtils 클래스를 사용할 수 있습니다. 당신이 정말로 그렇게하려면

+0

특히, getFullStackTrace() 메소드를 사용해야합니다. 'getStackTrace()'메소드가 포함하지 않는 동안 중첩 된 예외 스택을 포함합니다. 그것은 쉽게 바이트로 바뀔 수있는 문자열을 반환합니다. http://commons.apache.org/lang/api-2.4/org/apache/commons/lang/exception/ExceptionUtils.html#getFullStackTrace%28java.lang.Throwable%29 –

관련 문제