You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 07:10:14