我的应用程序在Jboss AS 7.1.1.final上运行。我需要将日志写入数据库,因此我编写了一个自定义处理程序:public class DataSourceHandler extends java.util.logging.Handler
。
一切正常但我需要获取调用此日志的类的行号和名称,如果出现错误,还需要获取堆栈跟踪。
在我们升级到Jboss 7之前,我们使用了log4j,我们设法使用:
org.apache.log4j.spi.LocationInfo locationInfo = new org.apache.log4j.spi.LocationInfo(event.getThrown(), event.getSourceClassName());
org.apache.log4j.spi.ThrowableInformation throwableInfo = new org.apache.log4j.spi.ThrowableInformation(event.getThrown());
if (locationInfo != null) {
fileName = locationInfo.getFileName();
lineNumber = locationInfo.getLineNumber();
}
if (throwableInfo != null) {
String[] exceptionArray = throwableInfo.getThrowableStrRep();
for (String line : exceptionArray) {
exceptionBuffer.append(line).append(NEW_LINE);
}
info = extractInfo(exceptionBuffer);
}
我现在该怎么办?
答案 0 :(得分:1)
J.U.L没有提供这些信息。如果你不介意依赖jboss-logmanger你可以扩展org.jboss.logmanager.ExtHandler
而不是J.U.L.处理程序。这将为您提供将提供该信息的org.jboss.logmanager.ExtLogRecord
。
你只需覆盖doPublish(ExtLogRecord)
而不是J.U.L.发布方法。
JBoss AS 7使用JBoss Logging和JBoss Log Manager,因此已经为您提供了依赖关系。