slf4j.Logger没有显示值

时间:2017-06-09 16:54:00

标签: java slf4j

为什么价值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>

2 个答案:

答案 0 :(得分:3)

正如我在评论中提到的那样,你没有正确地呼叫logger.info()Logger.javaslf4j中的一个界面,如果您发现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);