Java之日志打印占位符

在java中日志打印基本方式有System.out.print()打印,在工程应用中更多的是使用LogFactory,getLogger()打印,下面对其打印时使用占位符的用法进行简单分析。

1、System.out.print()
占位符由“%”和格式字符组成,如%d%f等。它的作用是将输出的数据转换为指定的格式输出。格式说明总是由“%”字符开始的。
%d整型输出,%ld长整型输出;
%o以八进制数形式输出整数;
%x以十六进制数形式输出整数,或输出字符串的地址;
%u以十进制数输出unsigned型数据(无符号数),注意%d与%u有无符号的数值范围,也就是极限的值,不然数值打印出来会有误;
%c用来输出一个字符;
%s用来输出一个字符串;
%f用来输出实数,以小数形式输出,默认情况下保留小数点6位;
%.100f用来输出实数,保留小数点100位;
%e以指数形式输出实数;
%g根据大小自动选f格式或e格式,且不输出无意义的零;
示例

System.out.printf("%s线程执行:%s\n",Thread.currentThread().getName(), LocalDateTime.now());

在这里插入图片描述
2、LogFactory,getLogger()
在logger打印日志的时候需要打印参数,如logger.info(“params:”+str);使用+号进行拼接,但该种方式会创建一个新的对象,当我们的参数非常大的时候。就会消耗很多的内存。执行速度也会变慢。这时可以使用占位符{},{}是英文大括号,多个参数就是多个大括号。
示例

logger.info("params1:{}  params2: {}", str1, str2); 

在这里插入图片描述

### Java 中 `%s` 占位符日志打印用法 在 Java日志框架(如 Log4j 或 SLF4J)中,可以使用类似于 C 风格的格式化字符串语法来构建日志消息。其中,`%s` 是一种占位符,表示将以字符串形式插入的内容。这种做法不仅提高了代码可读性,还优化了性能,因为只有在需要记录日志时才会执行字符串拼接操作。 下面是一个基于 SLF4J 的示例,展示了如何正确使用 `%s` 来打印日志: ```java import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class LoggingExample { private static final Logger logger = LoggerFactory.getLogger(LoggingExample.class); public static void main(String[] args) { String userName = "JohnDoe"; // 使用 %s 插入变量值 logger.info("User logged in successfully: {}", userName); // {} 等价于 %s int age = 30; String email = "john.doe@example.com"; // 多个占位符的情况 logger.debug("User details - Name: {}, Age: {}, Email: {}", userName, age, email); try { int result = 10 / 0; } catch (ArithmeticException e) { // 记录错误日志并附加异常堆栈信息 logger.error("An error occurred while performing division with user [{}]", userName, e); } } } ``` #### 关键点分析 1. **单个参数替换** 当只需要插入一个变量时,可以直接使用 `{}` 替代 `%s`[^1]。例如: ```java logger.info("Processing request from user: {}", userId); ``` 2. **多个参数替换** 支持在同一条日志语句中插入多个变量,按顺序依次匹配占位符[^2]。例如: ```java logger.warn("Invalid input received - User: {}, Input Value: {}", username, inputValue); ``` 3. **异常对象附加** 在记录错误日志时,通常会附带异常对象以便后续排查问题。此时可以在参数列表末尾追加异常实例[^3]。例如: ```java logger.error("Failed to process transaction for account [{}], Reason: {}", accountId, reason, exception); ``` 4. **性能优化建议** 对于调试级别的日志输出,推荐先检查当前日志级别是否允许打印再执行昂贵的操作(比如复杂的字符串拼接),从而避免不必要的开销[^4]。例如: ```java if (logger.isDebugEnabled()) { logger.debug("Detailed processing info: " + complexObject.toString()); } ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值