为什么价值12没有出现?
代码:
logger.info("height", 12);
堆栈跟踪:
13:41:29.022 [JavaFX Application Thread] INFO com.math.pro.ak.fragment.dashboard.LoginController - height
logback.xml
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>
%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
</Pattern>
</layout>
</appender>
<logger name="com.math.pro.ak" level="debug"
additivity="false">
<appender-ref ref="STDOUT" />
</logger>
<root level="error">
<appender-ref ref="STDOUT" />
</root>
</configuration>
答案 0 :(得分:3)
正如我在评论中提到的那样,你没有正确地呼叫logger.info()
。 Logger.java
是slf4j
中的一个界面,如果您发现info
方法存在重载方法。
Refer Logger interface info methods。
来自Logger.java
界面。当您拨打logger.info("height " + 12);
然后调用以下方法时,将会调用String
。
/**
* Log a message at the INFO level.
*
* @param msg the message string to be logged
*/
public void info(String msg);
当您致电logger.info("height {}", 12);
以下重载时,系统会调用该方法。
/**
* Log a message at the INFO level according to the specified format
* and argument.
* <p/>
* <p>This form avoids superfluous object creation when the logger
* is disabled for the INFO level. </p>
*
* @param format the format string
* @param arg the argument
*/
public void info(String format, Object arg);
重要: - 您应该始终使用第二种方法info(String format, Object arg)
,如方法的javadoc注释中所述此形式可避免在禁用记录器时创建多余的对象INFO级别(它在创建对象之前在内部检查是否启用了给定的日志级别)。因此,当禁用INFO级别时,您将保存cpu和内存,但是在第一种方法的情况下,无论记录器级别如何,都将始终创建方法中给定的 String 。
当您使用logger.debug()
时,上述优化特别有用。大多数情况下,您的应用程序将在 INFO 级别运行,并且您不必显式检查if (logger.isDebugEnabled()) {
条件,以保存CPU和内存。
答案 1 :(得分:1)
也许您打算使用parameterized logging:
logger.info("height: {}", 12);
或者您可以传入一个参数(尽管链接文档说明,使用参数化消息可以更好地执行):
logger.info("height: " + 12);