가장 쉬운 방법은 지정하십시오. 변환하십시오 트로이블.제스타크트라스 결과 ' ()' 을 보여 주는 문자열으로 stacktrace 가?
['트로이블.프린츠타크트라스 (프린트라이터 pw)'] [1] 사용하여 전송하십시오 스택 추적 적절한 기록기입니다.
import java.io.StringWriter;
import java.io.PrintWriter;
// ...
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);
String sStackTrace = sw.toString(); // stack trace as a string
System.out.println(sStackTrace);
[1]: https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html # printStackTrace-java.io.PrintWriter -
다음 방법을 사용할 수 있는 '예외' 로 스택 추적을 한 변환하십시오 'String'. 이 클래스 라이브러리를 사용할 수 있는 오픈 소스 아파치 커먼즈 랭 종속적이지만 함께 널리 사용되는 가장 흔한
['오르조지아파체스코먼스트랭스엑스티언스엑스티오누틸s.제스타크트라스 (트로이블)'] [1]
[1]: # 제스타크트라스 http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/exception/exceptionutils.html (자바드프랑스트로이블)
안드로이드 기기를 위한 개발, 이 경우 훨씬 편리하게 사용할 수 있습니다.
import android.util.Log;
String stackTrace = Log.getStackTraceString(exception);
형식은 동일합니까 제스타크트라스 os*용 예:
>. 09 24 16:09:07.042: I/System.out (4844): 자바드란g. 울프로인터렉세페시옹 >. 09 24 16:09:07.042: I/System.out (4844): dell. 코맥템퍼트스칸첼스망스티비티오언크리치 (MainActivity.java:43) >. 09 24 16:09:07.042: I/System.out (4844): dell. 안드로이드리아프리카티비티스페퍼맥레이트 (Activity.java:5248) >. 09 24 16:09:07.043: I/System.out (4844): dell. 안드로이d.app.린스트루멘테이션스칼라치빗이언크리치 (instrumentation.java: 1110년) >. 09 24 16:09:07.043: I/System.out (4844): dell. 안드로이드리아프리카티비티토레더스페퍼믈라운체이스티비티 (ActivityThread.java:2162) >. 09 24 16:09:07.043: I/System.out (4844): dell. 안드로이드리아프리카티비티토레더릭핸들로 카스티비티 (ActivityThread.java:2257) >. 09 24 16:09:07.043: I/System.out (4844): dell. 안드로이드리아프리카티비티토레더드라클레스 800 달러 (activitythread.java:139) >. 09 24 16:09:07.043: I/System.out (4844): dell. 안드로이드리아프리카티비티토리드 $ h. 앙드레 세이지 (activitythread.java: 1210년) >. 09 24 16:09:07.043: I/System.out (4844): dell. 안드로이드리오스.핸들러.디스파치메사게 (Handler.java:102) >. 09 24 16:09:07.043: I/System.out (4844): dell. 안드로이드리오스트로퍼트룹 (Looper.java:136) >. 09 24 16:09:07.044: I/System.out (4844): dell. 안드로이드리아프리카티비티토레더스망 (ActivityThread.java:5097) >. 09 24 16:09:07.044: I/System.out (4844): dell. 자바드랑이어플라치스메토d.2 보케나티베 (기본 방법) >. 09 24 16:09:07.044: I/System.out (4844): dell. 자바드랑이어플라치스메토d.2 보크 (Method.java:515) >. 09 24 16:09:07.044: I/System.out (4844): dell. 코맥안드로이d.인터나라자로스.지고타이니스 $ 메토당다리스카예스터룬 (ZygoteInit.java:785) >. 09 24 16:09:07.044: I/System.out (4844): dell. 코맥안드로이d.인터나라자로스.지고타이니t.맹 (ZygoteInit.java:601)
실제 ',' 인스턴스입니다 트로이블 경우 구글 구아바 는 ['트로이블s.제스타크트라체이스트링 ()'] [3].
예:
String s = Throwables.getStackTraceAsString ( myException ) ;
[3]: http://google.github.io/guava/releases/snapshot/api/docs/com/google/common/base/Throwables.html # getStackTraceAsString-java.lang.Throwable -
public static String getStackTrace(Throwable t) {
StringWriter sw = new StringWriter();
t.printStackTrace(new PrintWriter(sw));
return sw.toString();
}
전체 stacktrace 가 볼 수 있습니다 다음 코드를 사용하지 않고, 심지어 같은 api 를 통해 'String' 형식 'log4J 제바스티라자로거':
catch (Exception e) {
StackTraceElement[] stack = e.getStackTrace();
String exception = "";
for (StackTraceElement s : stack) {
exception = exception + s.toString() + "\n\t\t";
}
System.out.println(exception);
// then you can send the exception string to a external file.
}
이것은 복사하여 붙여 넣을 수 있는 버전을 직접 코드:
import java.io.StringWriter;
import java.io.PrintWriter;
//Two lines of code to get the exception into a StringWriter
StringWriter sw = new StringWriter();
new Throwable().printStackTrace(new PrintWriter(sw));
//And to actually print it
logger.info("Current stack trace is:\n" + sw.toString());
또는, catch 블록
} catch (Throwable t) {
StringWriter sw = new StringWriter();
t.printStackTrace(new PrintWriter(sw));
logger.info("Current stack trace is:\n" + sw.toString());
}
Arrays.toString(thrown.getStackTrace())
그 결과 가장 쉬운 방법은 문자열이어야 변환하십시오 에 있다. 스택 추적 인쇄하려면 이 내 프로그램을 사용하고 있습니다.
LOGGER.log(Level.SEVERE, "Query Builder Issue Stack Trace : {0} ,Message : {1} objid {2}", new Object[]{Arrays.toString(e.getStackTrace()), e.getMessage(),objId});
스택 추적 '' 다음 '에 인쇄인쇄 프린츠트림 변환하십시오 redhat. 구체화하십시오':
// ...
catch (Exception e)
{
ByteArrayOutputStream out = new ByteArrayOutputStream();
e.printStackTrace(new PrintStream(out));
String str = new String(out.toByteArray());
System.out.println(str);
}
스택 추적 문자열로 인쇄면이
import java.io.PrintWriter;
import java.io.StringWriter;
public class StackTraceUtils {
public static String stackTraceToString(StackTraceElement[] stackTrace) {
StringWriter sw = new StringWriter();
printStackTrace(stackTrace, new PrintWriter(sw));
return sw.toString();
}
public static void printStackTrace(StackTraceElement[] stackTrace, PrintWriter pw) {
for(StackTraceElement stackTraceEl : stackTrace) {
pw.println(stackTraceEl);
}
}
}
1 세트에서 너무 영리한 이 소총으로 의견 등이 달려 있지만 정말 너희는너희가 못하며창조된 위해 노력하고 있습니다.
로토프 경우 이미 라파체스코먼스 라이브러리 (대부분 대형 프로젝트를 will), 그리고 짧은 Amar& # 39 의 그 답을 찾을 수 있습니다. 양호임 데려갈 수 있는 10 분 수도 있지만, 라이브러리 및 설치처 올바른 (한 일을 알고, re you& # 39 미만인 경우). 그러나 이 시계는 스페어를 소리 때문에 시간이 없을 수 있습니다.
, 내가 하는 일을 하지만 와일드링이 전체 스택 추적을 네스트된 및 모든? 이 경우, 사용할 수 있는 비결은 apache.common& # 39 의 제풀스타크트라스 (http://otl. http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/exception/ExceptionUtils.html # getFullStackTrace% 28java.lang.throwable% 29)
It 구해줬으니 베이컨. 고마워, 아마르 대한 힌트!
아파치 커먼즈 언어 코드 ( 3.4 ([JavaDoc] [1]).
public static String getStackTrace(final Throwable throwable) {
final StringWriter sw = new StringWriter();
final PrintWriter pw = new PrintWriter(sw, true);
throwable.printStackTrace(pw);
return sw.getBuffer().toString();
}
제공합니다.* '없이' (java.io) 이 같은 작업을 진행할 수 있습니다.
String trace = e.toString() + "\n";
for (StackTraceElement e1 : e.getStackTrace()) {
trace += "\t at " + e1.toString() + "\n";
}
스택 추적 추적 '다음' 가변적입니다 너회의 있다. 또한 초기 원인 분석, 출력물에는 출력입니다 있다 '는 동일한 프린츠타크트라스 ()'
예 () ',' 프린츠타크트라스 익올때:
java.io.FileNotFoundException: / (Is a directory)
at java.io.FileOutputStream.open0(Native Method)
at java.io.FileOutputStream.open(FileOutputStream.java:270)
at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
at java.io.FileOutputStream.<init>(FileOutputStream.java:101)
at Test.main(Test.java:9)
이 때 '추적' 을 ',' stdout 인쇄했습니다 구체화하십시오 가지고 있다.
java.io.FileNotFoundException: / (Is a directory)
at java.io.FileOutputStream.open0(Native Method)
at java.io.FileOutputStream.open(FileOutputStream.java:270)
at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
at java.io.FileOutputStream.<init>(FileOutputStream.java:101)
at Test.main(Test.java:9)
8 이 시도하시겠습니까 jave 사용하는 경우,
Arrays.stream(e.getStackTrace())
.map(s->s.toString())
.collect(Collectors.joining("\n"));
'코드' () '기능을 제공하는 트로이블리자바 제스타크트라스 찾을 수 있습니다' 다음과 같습니다.
public StackTraceElement[] getStackTrace() {
return getOurStackTrace().clone();
}
',' 과 '스타크트라시엘레먼트 제공자에서 toString ()' 이 있다.
public String toString() {
return getClassName() + "." + methodName +
(isNativeMethod() ? "(Native Method)" :
(fileName != null && lineNumber >= 0 ?
"(" + fileName + ":" + lineNumber + ")" :
(fileName != null ? "("+fileName+")" : "(Unknown Source)")));
}
그럼 그냥 ',' 을 (를) 에 참가하십시오 스타크트라시엘레먼트 " \n".
또한, s # 39 의 충족되었으며 에사판시온 Gala& 대답할 포함시키십시오 원인에 대해서는 예외:
private String extrapolateStackTrace(Exception ex) {
Throwable e = ex;
String trace = e.toString() + "\n";
for (StackTraceElement e1 : e.getStackTrace()) {
trace += "\t at " + e1.toString() + "\n";
}
while (e.getCause() != null) {
e = e.getCause();
trace += "Cause by: " + e.toString() + "\n";
for (StackTraceElement e1 : e.getStackTrace()) {
trace += "\t at " + e1.toString() + "\n";
}
}
return trace;
}