如何在Spring Boot 3中使用i18n键读取messages.properties日志内容
在Spring Boot 3中通过I18n键输出本地化日志内容
当然可以实现,你只需要借助Spring Boot自动配置的MessageSource来解析messages.properties中的键,再将解析后的内容传入日志方法即可,具体步骤如下:
1. 注入MessageSource
Spring Boot会自动识别classpath下的messages.properties并创建MessageSource实例,直接在需要打日志的类中注入即可:
@Autowired private MessageSource messageSource;
2. 解析I18n键并输出日志
不能直接将键字符串传给日志方法,需要先通过MessageSource解析为对应文本。因为你只用单一语言,直接使用默认Locale或者指定固定Locale(比如中文Locale)即可:
// 解析键并输出日志 String localizedMessage = messageSource.getMessage("user.created", null, Locale.CHINA); log.info(localizedMessage);
假设你的messages.properties中配置了user.created=用户已创建,执行后日志就会输出该中文内容。
如果需要带参数的消息(比如user.created=用户{0}已创建),可以传入参数数组:
String localizedMessage = messageSource.getMessage("user.created", new Object[]{"张三"}, Locale.CHINA); log.info(localizedMessage);
此时日志会输出用户张三已创建。
3. 封装工具类(可选)
如果多个类都需要用这种方式打日志,建议封装一个工具类避免重复代码:
@Component public class LogLocalizer { private static MessageSource messageSource; @Autowired public void setMessageSource(MessageSource messageSource) { LogLocalizer.messageSource = messageSource; } public static String get(String code) { return messageSource.getMessage(code, null, Locale.CHINA); } public static String get(String code, Object[] args) { return messageSource.getMessage(code, args, Locale.CHINA); } }
使用时直接调用工具类方法:
log.info(LogLocalizer.get("user.created")); // 带参数的情况 log.info(LogLocalizer.get("user.created", new Object[]{"张三"}));
注意事项
- 确保messages.properties文件放在
src/main/resources目录下,Spring Boot会自动加载 - 单一语言场景下无需创建其他语言的messages_xx.properties文件,直接使用默认的messages.properties即可
内容的提问来源于stack exchange,提问作者robert trudel
相关产品推荐
相关产品推荐

