Sur*_*eph 24 java logging stack-trace java.util.logging
我正在使用Java的Logger课程.我想通过ex.printStackTrace()进入Logger.log(loglevel, String),但printStackTrace()回报率void.所以我无法传递和打印异常的堆栈跟踪.
有什么方法可以转换void成String,或者是否有任何其他方法来打印整个堆栈的异常跟踪?
Sai*_*sif 37
你需要明白这void是实际的nothingness.你无法转换什么都不是.你可能最终打印void成一个字符串,但(相信我),你不希望这样.
我认为你在寻找的是
// assuming ex is your Exception object
logger.error(ex.getMessage(), ex);
// OR
Logger.log(errorLogLevel, ex.getMessage(), ex)
Run Code Online (Sandbox Code Playgroud)
这将使用您配置的记录器打印错误消息.有关更多详细信息,您可以查看异常#getMessage()的java文档
hzp*_*zpz 22
像这样使用java.util.logging.Logger#log(Level, String, Throwable)和传入ex第三个参数:
LOGGER.log(Level.INFO, ex.getMessage(), ex);
Run Code Online (Sandbox Code Playgroud)
小智 9
另一种选择是:
import org.apache.commons.lang3.exception.ExceptionUtils;
log.error("Exception : "+ExceptionUtils.getStackTrace(exception));
Run Code Online (Sandbox Code Playgroud)
小智 7
使用以下格式,您可以获得堆栈跟踪:
java.util.logging.SimpleFormatter.format=%1$tF %1$tT [%4$-7s][%2$s] %5$s %6$s%n
Run Code Online (Sandbox Code Playgroud)
此模式中的要点是 %6$s。它将打印堆栈跟踪。
小智 6
有一个重载的printStackTrace 方法接收PrintWriter。
你可以做这样的事情
Writer buffer = new StringWriter();
PrintWriter pw = new PrintWriter(buffer);
ex.printStackTrace(pw);
Logger.log(loglevel, buffer.toString());
Run Code Online (Sandbox Code Playgroud)
您可以使用getStackTrace()方法获取 StackTraceElements 数组,并从那里生成一个字符串。否则,如果仅最终错误消息就足够了,请使用getMessage()Makoto 建议的方法。
String要从对象数组中获取堆栈跟踪StackTraceElement,您需要迭代该数组(取自 JDK7 源代码):
StringBuilder builder = new StringBuilder();
StackTraceElement[] trace = getOurStackTrace();
for (StackTraceElement traceElement : trace)
builder.append("\tat " + traceElement + "\n");
Run Code Online (Sandbox Code Playgroud)
另一种选择是使用printStackTrace(PrintStream s),您可以在其中指定要打印堆栈跟踪的位置:
ByteArrayOutputStream out1 = new ByteArrayOutputStream();
PrintStream out2 = new PrintStream(out1);
ex.printStackTrace(out2);
String message = out1.toString("UTF8");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37350 次 |
| 最近记录: |