Java 日志异常和参数
我将sl4j api 1.7.2与slf4j-log4j12一起使用 我想记录如下内容: 22:52:27345警告[class]无法加载用户1-原因: javax.ejb.EJBException:javax.persistence.NoResultException:无实体 在中找到要查询的 org.jboss.as.ejb3.tx.CMTTxInterceptor.handleExceptionOnourtx(CMTTxInterceptor.java:166) [jboss-as-ejb3-7.1.1.Final.jar:7.1.1.Final] org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInurtx(CMTTxInterceptor.java:230) [jboss-as-ejb3-7.1.1.Final.jar:7.1.1.Final] org.jboss.as.ejb3.tx.CMTTxInterceptor.required(CMTTxInterceptor.java:304) [jboss-as-ejb3-7.1.1.Final.jar:7.1.1.Final] ... fullstackTrace 所以我试过了Java 日志异常和参数,java,slf4j,Java,Slf4j,我将sl4j api 1.7.2与slf4j-log4j12一起使用 我想记录如下内容: 22:52:27345警告[class]无法加载用户1-原因: javax.ejb.EJBException:javax.persistence.NoResultException:无实体 在中找到要查询的 org.jboss.as.ejb3.tx.CMTTxInterceptor.handleExceptionOnourtx(CMTTxInterceptor.java:166) [jboss-as-ejb
try {
//...
} catch (Exception e) {
logger.warn("Failed to load User {} - Reason : {}", userId, e);
}
或
但这两种解决方案都不起作用
第一次尝试:
未能加载用户4-原因:javax.ejb.EJBException:
javax.persistence.NoResultException:未找到用于查询的实体
第二点:
Failed to load User 4 - Reason :
有可能做到吗
谢谢。检查和。您可能正在使用1.6.0之前的SL4J版本,在该版本中,e
将被解释为一个简单对象(即,如果您有参数占位符,SL4J将调用e.toString()
)
至于为什么它使用不同于1.7.2的版本,您的应用程序服务器类路径中可能包含了以前的版本,并且在启动应用程序之前就已经加载了
您可以尝试修复类加载问题,也可以绕过旧版本行为
如果选择后一个路径,则从重载版本中,您需要自动展开堆栈跟踪的警告(字符串msg,Throwable t))
版本:
logger.warn("Failed to load User " + userId + " - Reason", e);
或者警告(字符串格式,对象arg1,对象arg2)
一个,带有为您展开堆栈跟踪的代码
if (logger.isWarnEnabled()) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);
String expanded = sw.toString(); // stack trace as a string
logger.warn("Failed to load User {} - Reason : {}", userId, expanded);
}
使用slf4j和logback(默认实现)记录实现细节是不好的,它会打印出两个示例的堆栈跟踪的前8行,而且根本不需要替换“{}”。可能是您对log4j的配置,或者打印格式,或者log4j本身(尽管我对此表示怀疑)在classpath坏jboss中的错误版本:(
if (logger.isWarnEnabled()) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);
String expanded = sw.toString(); // stack trace as a string
logger.warn("Failed to load User {} - Reason : {}", userId, expanded);
}