0

我的应用程序在 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);
}

我现在该怎么做?

4

1 回答 1

1

JUL 不提供该信息 如果您不介意对 jboss-logmanger 的依赖,您可以扩展org.jboss.logmanager.ExtHandler而不是 JUL 处理程序。这将为您提供org.jboss.logmanager.ExtLogRecord将提供该信息的 a。

您只需覆盖doPublish(ExtLogRecord)而不是 JUL 发布方法。

JBoss AS 7 使用 JBoss Logging 和 JBoss Log Manager,因此已经为您提供了依赖关系。

于 2012-07-10T16:13:37.767 回答