从我在网上找到的许多例子、文档和Stack overflow中找到的例子来看,在slf4j中连接字符串的正确方法是使用内置的字符串格式。
例如:
LOGGER.error("ExceptionHandler throws {}" , appException);
我也尝试了不设置格式,结果也是一样的:
LOGGER.error("ExceptionHandler throws " , appException);
出于某种原因,这对我不起作用,我不知道我错过了什么。如果我们传递一个对象,是否使用不同的格式?
2018-07-18 02:38:19 ERROR c.a.c.c.p.ExceptionProcessor:67 - ExceptionHandler throws {}
而不是使用常规级联时得到的预期消息:
LOGGER.error("ExceptionHandler throws " + appException);
或者手动调用.toString()
LOGGER.error("ExceptionHandler throws {}" , appException.toString());
根据声纳的说法,这最后一个选项是不正确的,因为:
由于printf样式的格式字符串是在运行时解释的,而不是由编译器验证的,因此它们可能包含导致创建错误字符串的错误。此规则在调用格式(...)时静态验证printf样式的格式字符串与其参数的相关性java.util.Formatter、java.lang.String、java.io.PrintStream、MessageFormat和java.io.PrintWriter类的方法以及printf(...)java.io.PrintStream或java.io.PrintWriter类的方法。
AppException类如下:
import java.io.Serializable;
import javax.ws.rs.core.Response.Status;
public class AppException extends Exception implements Serializable {
private static final long serialVersionUID = 1L;
private Error error;
private Status status;
public AppException(Error error, Status status) {
this.error = error;
this.status = status;
}
public AppException() {
}
public Error getError() {
return error;
}
public void setError(Error error) {
this.error = error;
}
public Status getStatus() {
return status;
}
public void setStatus(Status status) {
this.status = status;
}
@Override
public String toString() {
return "AppException [error=" + error + ", status=" + status + "]";
}
}
我正在按照以下方式构建日志程序:
private static final Logger LOGGER = LoggerFactory.getLogger(ExceptionProcessor.class);
我正在使用SLF4J-API 1.7.22
您相信Logger.Error(“ExceptionHandler throws{}”,appException);
正在调用:
错误(字符串格式,对象参数)
但它实际上是在召唤:
错误(字符串消息,可抛出t)
因为这更适合参数类型。
如果希望它调用第一个,请将参数强制转换为object
:
LOGGER.error("ExceptionHandler throws {}" , (Object) appException);
Logger logger = LoggerFactory.getLogger("Test");
Exception e = new Exception("Test");
logger.error("Test 1: {}", e); // calls error(String, Throwable)
logger.error("Test 2: {}", (Object) e); // calls error(String, Object)
输出
[main] ERROR Test - Test 1: {}
java.lang.Exception: Test
at Test.main(Test.java:8)
[main] ERROR Test - Test 2: java.lang.Exception: Test
第一个调用按原样打印消息(使用{}
)和StackTrace。
第二个调用打印消息,使用异常文本替换{}
。
我正在使用的url-String newfullurl=“https://myappnametest.herokuapp.com/predict?{”+“”arr“”+“:[114.4756,31.57832,4.698017,1.834955,1.433942,1.388775,6.730856,12.19739,7.460399,4.807888,115.51131,69.19083,504.
我看过很多关于SO的类似问题,但没有一个回答我的问题。 我有一个文件,内容如下: 我想重新格式化php或html代码,无论是全局还是选择。 我已经尝试了所有的选项,但它不起作用。 CtrlShiftp, 如果我更改了,然后它就可以工作了。
点击按钮后,我尝试在< code>Text小部件中显示当前的< code>DateTime。下面的作品,但我想改变格式。 目前的做法 结果 问题 如何删除部分?
问题内容: 我正在尝试从标准ISO 8601 格式更改为好的MMM d yyyy hh:mm z格式,但是我当前的代码失败。 我正在从api接收时间和日期。 问题答案: A 是“ ISO-8601日历系统中没有时区的日期,例如2007-12-03”,因此那里没有足够的信息。使用代替。 同样,吞噬这样的异常会使得排除故障变得更加困难。当您不打算处理异常时,要么根本不捕获它,要么捕获并重新包装在Run
问题内容: 我正在尝试使用jena库为语义Web编写Java Web搜寻器。我有使用Netbeans构建项目。我收到两个错误: 无法实例化SLF4J LoggerFactory报告的异常:java.lang.NoClassDefFoundError:org / apache / log4j / Level 无法在org.slf4j.LoggerFactory.bind(LoggerFactory.
我正在尝试使用jena库为语义网编写java web爬虫程序。我已经使用Netbeans构建了一个项目。我收到两个错误: > 未能实例化SLF4J LoggerFactory报告的异常:java。lang.NoClassDefFoundError:org/apache/log4j/Level 无法初始化类com。惠普。hpl。耶拿。rdf。模型impl。modelorg。slf4j。伐木厂。绑定(