如何获取e.printStackTrace()并将其存储到String变量中?我想使用e.printStackTrace()稍后在我的程序中生成的字符串.
我还是Java的新手,所以我不太熟悉StringWriter,我认为这将是解决方案.或者,如果您有任何其他想法,请告诉我.谢谢
在我的Java代码中,它正在检查!null条件并抛出一个Exception.
例如
try
{
if (stud.getCall() != null)
acc.Call = stud.getCall().toString();
else
throw new Exception("Data is null");
}
catch (Exception e)
{
logger.error("Some Error" + e.getMessage());
throw new Exception("Please check the Manatadatory Field is Missing" + e.getMessage());
}
Run Code Online (Sandbox Code Playgroud)
但在我得到的日志中:
Some Error null
Run Code Online (Sandbox Code Playgroud)
为什么e.getMessage null?
我很好奇printStackTrace()和toString()之间的区别.乍一看,他们似乎完全一样.
码:
try {
// Some code
} catch (Exception e)
e.printStackTrace();
// OR
e.toString()
}
Run Code Online (Sandbox Code Playgroud) 如何在Java中获得完整的异常消息?
我正在创建一个Java应用程序.如果存在运行时异常,则会弹出JDialoga JTextArea.我试图在我的应用程序中生成运行时异常,但显示异常消息的文本区域如下所示:
java.lang.ClassNotFoundException: com.app.Application
Run Code Online (Sandbox Code Playgroud)
但是,我希望我的文本区域显示如下:

这是我的代码的一部分被try和包围catch:
String ex = e.toString();
this.addText(ex);
Run Code Online (Sandbox Code Playgroud)
我试着用e.getLocalizedMessage()和e.getMessage(),但这些都不能工作.
我意识到在java中GC最终会清理对象,但是我问是不是关闭你的字符串编写器是不好的做法,目前我这样做:
private static String processTemplate(final Template template, final Map root) {
StringWriter writer = new StringWriter();
try {
template.process(root, writer);
} catch (TemplateException e) {
logger.error(e.getMessage());
} catch (IOException e) {
logger.error(e.getMessage());
}
finally {
}
return writer.toString();
}
Run Code Online (Sandbox Code Playgroud)
我应该关闭编写器并创建一个像这样的新String:
String result = "";
...
finally {
result = writer.toString();
writer.close();
}
Run Code Online (Sandbox Code Playgroud)
这样做更好吗?
我有一种情况,我想使用记录器打印catch块中捕获的所有异常.
try {
File file = new File("C:\\className").mkdir();
fh = new FileHandler("C:\\className\\className.log");
logger.addHandler(fh);
logger.setUseParentHandlers(false);
SimpleFormatter formatter = new SimpleFormatter();
fh.setFormatter(formatter);
} catch (Exception e) {
logger.info(e);
}
Run Code Online (Sandbox Code Playgroud)
我得到错误记录器无法应用 java.io.Exception...
我担心的是,如果我在try块中执行了很多操作,并且只保留一个catch块作为catch(Exception e),那么有没有办法使用logger来打印catch块中捕获的任何异常?注意:我们使用的是java.util.logging.Logger API
我尝试了SLF4J FAQ中的简单示例:
package com.aed.tests.logging;
import org.slf4j.LoggerFactory;
public class TestLogging
{
public TestLogging()
{
// TODO Auto-generated constructor stub
}
/**
* @param args
*/
public static void main(String[] args)
{
String s = "Hello world";
try
{
Integer i = Integer.valueOf(s);
}
catch(NumberFormatException e)
{
LoggerFactory.getLogger("simplelogger").error("Failed to format {}", s, e);
LoggerFactory.getLogger("simplelogger").error("Without parametrized string", e);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是输出:
15:33:51,248000000 [SEVERE]simplelogger: Failed to format Hello world
15:33:51,275000000 [SEVERE]simplelogger: Without parametrized string
Run Code Online (Sandbox Code Playgroud)
我使用java.util.logging作为日志记录实现,使用以下logging.properties
# Properties file which configures the …Run Code Online (Sandbox Code Playgroud) 看起来像是一个相当直接的问题,但是当我触发Scalatra中的顶级错误处理程序时,我想记录堆栈跟踪.我故意在我的一个方法中抛出异常做一些简单的事情:
throw new IllegalArgumentException
Run Code Online (Sandbox Code Playgroud)
在错误处理程序中,代码如下所示:
error {
case e => {
val logger = LoggerFactory.getLogger(getClass)
logger.info("an exception occurred: " + e.getStackTrace())
logger.info("the request body is: " + request)
NotFound("An error occurred, please contact support")
}
}
Run Code Online (Sandbox Code Playgroud)
错误处理程序本身是Scalatra特定的,但我很确定我正在寻找的答案可以使用任何vanilla Scala技术来解决.在这一点上我能做些什么来抓住堆栈跟踪?我不确定请求是否与错误处理程序在同一个线程上,否则可能会有一些答案.e.getStackTrace()给我[Ljava.lang.StackTraceElement;@1f6b6954
这里打印出堆栈跟踪的最佳方法是什么,以便我可以记录并查看它以修复我可怕代码中的错误?
我正在使用 log4j syslog 附加程序,并注意到当发生异常时,附加程序将堆栈跟踪中的每个条目写入新行。
有没有一种方法可以对其进行配置,以便整个堆栈跟踪将作为一行而不是多行?
我有一个Factory方法,它从ID调用返回一个对象.
模拟代码:
public static Object getById(String id) {
Object o = CRUD.doRecovery(Class, id);
if(o == null) {
printLogMessage("recovery by ID returned Null: " + id);
// would really like to show only a few lines of stack trace.
}
return o;
}
Run Code Online (Sandbox Code Playgroud)
如何只显示堆栈跟踪的前N行(所以我知道方法的调用者)而不将整个堆栈跟踪转储到日志上或者必须依赖外部库?
到目前为止,在GWT super dev模式下调试似乎是一个真正的痛苦.如果有任何错误,则没有堆栈跟踪,只是在chrome控制台中给出了一个神秘的消息.有没有办法让所有错误打印堆栈跟踪,比如开发模式?
我相信我已经有源地图,因为如果我在Chrome的开发工具中找到Sources,我可以看到我的java类的源代码.
我使用 kotlin.logging 作为应用程序的日志记录框架。
我希望能够以更易读的方式(可能是 JSON 格式)记录堆栈跟踪:
我正在执行以下操作,但会导致非常冗长/不可读的格式:
logger.error("Exception caught in handleIllegalArgumentsException: $e", e.printStackTrace())
Run Code Online (Sandbox Code Playgroud)
仅记录 Throwable 异常时(见下文),它不显示堆栈跟踪:
logger.error("Exception caught in handleIllegalArgumentsException: $e")
Run Code Online (Sandbox Code Playgroud) 如何配置默认的 java 堆栈跟踪打印行为,以便只有头部可见?目前我使用2>&1 | heador| less -i并且我发现它不是最佳的。
当遇到未捕获的异常时,Java 会打印 115 行,然后是文本... 102 more。这条痕迹的 99% 到 97% 与我无关。这让前 3 行很有趣。
如何配置 Java 打印 2 行,然后在我的示例中打印... 215 more?
java ×11
exception ×6
logging ×3
stack-trace ×3
debugging ×1
freemarker ×1
gwt ×1
kotlin ×1
log4j ×1
scala ×1
scalatra ×1
slf4j ×1
source-maps ×1
spring-boot ×1
stringwriter ×1
syslog ×1