教程 > SLF4J 教程 > SLF4J 基础 阅读:40

SLF4J 参数化日志记录

正如本教程前面所讨论的,SLF4J 提供了对参数化日志消息的支持。

我们可以在消息中使用参数并稍后在同一语句中将值传递给它们。

语法

如下所示,我们需要在消息(字符串)中任何需要的地方使用占位符({}),稍后我们可以以对象形式为占位符传递值,用逗号分隔消息和值。

Integer age;
Logger.info("在 {} 岁时,jiyik 得到了他的第一份工作", age);

以下示例演示了使用 SLF4J 的参数化日志记录(使用单个参数)。

package main.java.com.jiyik.slf4j;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class SLF4JExample {

    public static void main(String[] args) {
        // 创建 Logger 对象
        Logger logger = LoggerFactory.getLogger(SLF4JExample.class);

        Integer age = 23;

        // 记录信息
        logger.info("在 {} 岁时,jiyik 得到了他的第一份工作", age);
    }

}

执行后,上述程序生成以下输出

SLF4J 参数化日志

参数化日志的优势

在 Java 中,如果我们需要在语句中打印值,我们将使用连接运算符作为

System.out.println("在 "+23+" 岁时,jiyik 得到了他的第一份工作");

这涉及将整数值 23 转换为字符串,并将该值连接到它周围的字符串。

如果它是一个日志语句,并且如果我们的语句的特定日志级别被禁用,那么所有这些计算都将毫无用处。

在这种情况下,我们可以使用参数化日志记录。 在这种格式中,最初 SLF4J 确认是否启用了特定级别的日志记录。 如果是这样,则它将消息中的占位符替换为相应的值。

例如,如果我们有一个声明为

Integer age;

logger.info("在 {} 岁时,jiyik 得到了他的第一份工作", age);

仅当启用了调试时,SLF4J 才会将 age 转换为整数并将其与字符串连接,否则,它什么也不做。 因此,在禁用日志记录级别时会产生参数构造的成本。

两个参数变量

我们还可以在消息中使用两个参数

logger.info("Old weight is {}. new weight is {}.", oldWeight, newWeight);

以下示例演示了参数化日志记录中两个占位符的用法。

package main.java.com.jiyik.slf4j;

import java.util.Scanner;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class SLF4JExample {

    public static void main(String[] args) {
        Integer oldWeight;
        Integer newWeight;
        Scanner sc = new Scanner(System.in);
        System.out.println("输入 old weight:");
        oldWeight = sc.nextInt();

        System.out.println("输入 new weight:");
        newWeight = sc.nextInt();

        // 创建 Logger 对象
        Logger logger = LoggerFactory.getLogger(SLF4JExample.class);

        logger.info("Old weight is {}. new weight is {}.", oldWeight, newWeight);
    }

}

执行后,上述程序会生成以下输出。

SLF4J 参数化日志两个参数变量

多个参数变量

通过上面的示例,可以推导出,我们还可以使用两个以上的占位符,如下例所示

package main.java.com.jiyik.slf4j;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class SLF4JExample {

    public static void main(String[] args) {
        Integer age = 24;
        String designation = "PHP 开发工程师";
        String company = "迹忆客";

        //Creating the Logger object
        Logger logger = LoggerFactory.getLogger(SLF4JExample.class);

        //Logging the information
        logger.info("在 {} 岁时 jiyik 在 {} 公司得到了他的第一份 {} 的工作", age, company, designation);
    }

}

上述代码执行结果如下

SLF4J 参数化日志多个参数变量

查看笔记

扫码一下
查看教程更方便