Ros*_*iar 20 java logging log4j string-formatting
我log4j v1.2.14用于登录我的项目,我也使用Java 7 String.format()将变量放在我的输出中.目前我正在写作
LOGGER.info(String.format("Your var is [%s] and you are [%s]", myVar, myVar1));
Run Code Online (Sandbox Code Playgroud)
这真的是输出字符串的最佳方式吗?我觉得log4j应该隐式实现如下:
LOGGER.info("Your var is [%s] and you are [%s]", myVar, myVar1);
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?此外,是否有支持这种情况的Java日志框架?
Yos*_*ner 31
slf4j的api提供了" 参数化日志记录 ",它允许你做到这一点,尽管语法略有不同.那里的例子是:
logger.debug("Value {} was inserted between {} and {}.", newVal, below, above);
Run Code Online (Sandbox Code Playgroud)
对于实现,您可以使用本机实现slf4j的Logback,或者使用slf4j绑定来连接log4j或其他记录器.用户手册解释了这一点,以及一个简短的例子.
bob*_*alf 14
Log4j 支持内部格式化。我没有在任何地方找到它的记录,但我在这里看到了一个例子:
https://logging.apache.org/log4j/2.x/manual/markers.html
我尝试了一下,确实有效!我使用的是 log4j 2.11.2。
int i = 42;
String str1 = "the answer";
String str2 = "life, the universe, and everything";
console.info("{} is {} to {}", i, str1, str2);
Run Code Online (Sandbox Code Playgroud)
查看 Logger 的 javadoc,我想说它是在 Lo4j 2 中引入的,并且最多支持 10 个参数。
https://logging.apache.org/log4j/2.x/log4j-api/apidocs/org/apache/logging/log4j/Logger.html
Mat*_*ieu 11
使用String.format、+或不同于日志系统提供的字符串格式化程序(log4j例如)被认为是一种不好的做法。通常,在代码中有很多您不想在生产中看到的低级日志(调试、信息)。如果您使用例如String.format格式化要记录的字符串,那么您将生成并格式化一个可能很长并消耗资源的新字符串,即使最后不会记录任何内容(例如,如果log4j最小级别设置为警告)或错误)。通过使用记录器格式化系统(如 中的log4j),您可以让记录器避免生成不需要记录的格式化字符串。
在某些情况下,这可能会产生很大的不同。
| 归档时间: |
|
| 查看次数: |
18543 次 |
| 最近记录: |