printStackTrace到java.util.logging.Logger
如何使用java.util.Logger打印整个堆栈跟踪?(没有烦人的Netbeans) 问题本来应该指定在Java SE中保持。忽略那个要求是我的错误 使用错误代码:printStackTrace到java.util.logging.Logger,java,nullpointerexception,java.util.logging,throwable,printstacktrace,Java,Nullpointerexception,Java.util.logging,Throwable,Printstacktrace,如何使用java.util.Logger打印整个堆栈跟踪?(没有烦人的Netbeans) 问题本来应该指定在Java SE中保持。忽略那个要求是我的错误 使用错误代码: package model; import java.util.Observable; import java.util.logging.Logger; import java.util.regex.Matcher; import java.util.regex.Pattern; public class TelnetEve
package model;
import java.util.Observable;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class TelnetEventProcessor extends Observable {
private static Logger log = Logger.getLogger(TelnetEventProcessor.class.getName());
private String string = null;
public TelnetEventProcessor() {
}
private void stripAnsiColors() {
Pattern regex = Pattern.compile("\\e\\[[0-9;]*m");
Matcher regexMatcher = regex.matcher(string);
string = regexMatcher.replaceAll(""); // *3 ??
}
public void parse(String string) {
this.string = string;
ifs();
}
// [\w]+(?=\.)
private void ifs() {
log.fine("checking..");
if (string.contains("confusing the hell out of")) {
Pattern pattern = Pattern.compile("[\\w]+(?=\\.)"); //(\w+)\.
Matcher matcher = pattern.matcher(string);
String enemy = null;
GameData data = null;
while (matcher.find()) {
enemy = matcher.group();
}
try {
data = new GameData.Builder().enemy(enemy).build();
log.fine("new data object\t\t" + data.getEnemy());
setChanged();
notifyObservers(data);
} catch (NullPointerException npe) {
log.severe(npe.printStackTrace(System.out));
}
} else if (string.contains("Enter 3-letter city code:")) {
log.fine("found enter city code");
} else {
}
}
}
另见:
为什么不将异常放在记录器中 您可以使用以下方法:
logger.log(Level level, String msg, Throwable thrown)
不显式打印堆栈跟踪
Throwable
s具有附加到它们的堆栈跟踪,您可以将Throwable
传递到日志方法:
log(Level level, String msg, Throwable thrown)
severe
方法仅用于记录没有相关可丢弃信息的严重消息。如果需要记录可丢弃信息,则应使用以下方法:
try {
data = new GameData.Builder().enemy(enemy).build();
log.fine("new data object\t\t" + data.getEnemy());
setChanged();
notifyObservers(data);
} catch (NullPointerException npe) {
log.log(Level.SEVERE, npe.getMessage(), npe);
}
异常是由于方法为
void
,这意味着它不返回任何内容。您正在尝试执行以下操作:
log.severy(npe.printStackTrace(System.out))代码>
我的猜测是severe
方法需要字符串,而不是void
您应该将System.err重定向到记录器,该过程不是太简单,但您可以使用以下代码:
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
public class LogOutputStream extends ByteArrayOutputStream {//java.io.OutputStream {
private String lineSeparator;
private Logger logger;
private Level level;
public LogOutputStream(Logger logger, Level level) {
super();
this.logger = logger;
this.level = level;
this.lineSeparator = System.getProperty("line.separator");
}
@Override
public void flush() throws IOException {
String record;
synchronized (this) {
super.flush();
record = this.toString();
super.reset();
if ((record.length() == 0) || record.equals(this.lineSeparator)) {
// avoid empty records
return;
}
this.logger.logp(this.level, "", "", record);
}
}
}
以及设置此设置的代码(在首次创建记录器时应调用)
Logger logger = Logger.getLogger("Exception");
LogOutputStream los = new LogOutputStream(logger, Level.SEVERE);
System.setErr(new PrintStream(los, true));
这将把System.err流重定向到记录器。可能是重复的问题
下面是给定url的解释
使用log4j
这是通过以下方式完成的:
logger.error("An error occurred", exception);
第一个参数是要显示的消息,第二个参数是
记录其stacktrace的异常(可丢弃)
另一个选择是commons日志,
在相同的地方:
log.error("Message", exception);
使用java.util.logging
这可以通过以下方式完成:
logger.log(Level.SEVERE, "Message", exception);
您还可以尝试使用您可以使用Apache ExceptionUtils
try {
data = new GameData.Builder().enemy(enemy).build();
log.fine("new data object\t\t" + data.getEnemy());
setChanged();
notifyObservers(data);
} catch (NullPointerException npe) {
logger.info(**ExceptionUtils.getFullStackTrace(npe)**);
}
我认为这是实现所需结果的最简单的方法。当然,我们必须尝试一下。这个答案唯一的问题是相当冗长——但这是Java!这是我第一次看到有人捕获NP异常!您的解决方案帮助了我。另一个解决方法:logger.severe(Arrays.toString(例如getStackTrace())))这就是我要找的。谢谢。
try {
data = new GameData.Builder().enemy(enemy).build();
log.fine("new data object\t\t" + data.getEnemy());
setChanged();
notifyObservers(data);
} catch (NullPointerException npe) {
logger.info(**ExceptionUtils.getFullStackTrace(npe)**);
}