《SLF4J官方文档》本地化支持

简介:

SLF4J-dev邮件列表上的一个讨论产生了一种开源项目叫做CAL10N或编译器辅助定位 。

正如其名所表示的,CAL10N专注于Java应用程序本地化/国际化的问题。

在CALI0N上,附带SLF4J-EXT-1.7.21.jar的org.slf4j.cal10n包的顶部增加了一个非常薄的一层包以提供本地化的日志记录。

一旦你有一个上一个IMessageConveyor实例的句柄,你可以创建LocLoggerFactory ,这反过来又可以创造能够做本地化的日志记录的LocLogger实例。

让我们假设你已经在你的应用程序中定义本地化的消息。 按照CAL10N的理念,你已经在枚举类型Production里为消息声明了keys 。

01 import ch.qos.cal10n.LocaleData;
02 import ch.qos.cal10n.Locale;
03 import ch.qos.cal10n.BaseName;
04  
05 @BaseName("production")
06 @LocaleData( { @Locale("en_UK"), @Locale("ja_JP") })
07 public enum Production  {
08 APPLICATION_STARTED,
09 APPLICATION_STOPPED,
10 ...
11 DB_CONNECTION,
12 DB_CONNECTION_FAILURE;
13 }
 

 

假定你已经为不同的区域“en_UK”和“Ja_JP创建了相应的包文件。 下面是“en_UK”区域的样本包。

1 APPLICATION_STARTED=Application <strong>{0}</strong> has started.
2  
3 APPLICATION_STOPPED=Application <strong>{0}</strong> has stopped.
4  
5 ...

然后,您可以实例化一个IMessageConveyor ,它注入到一个LogLoggerFactory ,通过名称实例和日志检索多个LogLogger,像下一个示例代码阐述的一样。

01 import java.util.Locale;
02  
03 import org.slf4j.cal10n.LocLogger;
04 import org.slf4j.cal10n.LocLoggerFactory;
05  
06 import ch.qos.cal10n.IMessageConveyor;
07 import ch.qos.cal10n.MessageConveyor;
08  
09 public class MyApplication {
10  
11 // create a message conveyor for a given locale
12 IMessageConveyor  messageConveyor = new MessageConveyor(Locale.UK);
13  
14 // create the LogLoggerFactory
15 LocLoggerFactory llFactory_uk = new LocLoggerFactory(messageConveyor);
16  
17 // create a locLogger
18 LocLogger locLogger = llFactory_uk.getLocLogger(this.getClass());
19  
20 public void applicationStart() {
21 locLogger.info(Production.APPLICATION_STARTED, "fooApp");
22 // ..
23 }
24  
25 public void applicationStop() {
26 locLogger.info(Production.APPLICATION_STOPPED, "fooApp");
27 // ...
28 }
29 }
 

假设资源包production_en_UK.properties存在,并且底层的日志框架开启info级别日志,日志消息将用英语[英国]输出。

请注意, LogLogger是一个普通的SLF4J记录器,它有额外支持本地化的方法。 对于那些需要一个枚举作为第一个参数的额外方法, LogLogger遵循参数替换的Java约定标准,这个标准是由java.text.MessageFormat类定义的。 对于非本地化的日志,将一个字符串作为第一个参数, LogLogger如下{}约定,作为惯例让所有org.slf4j.Logger实现。

如下例子阐述了差别。

01 import ...;
02 public class MyApplication {
03  
04 IMessageConveyor  messageConveyor = new MessageConveyor(Locale.UK);
05 LocLoggerFactory llFactory_uk = new LocLoggerFactory(messageConveyor);
06 LocLogger locLogger = llFactory_uk.getLocLogger(this.getClass());
07  
08 public void someMethod() {
09 // follows the MessageFormat convention
10 locLogger.info(Production.APPLICATION_STARTED, "fooApp");
11  
12 // follows the {} convention
13 logLogger.info("Hello {}", name);
14 ...
15 }
16 }
 
相关文章
|
存储 虚拟化 Windows
ESXI8.0安装Windows11
HKEY_LOCAL_MACHINE\SYSTEM\Setup 创建一个名为“LabConfig”的项,在“LabConfig”下创建两个32位DWORD值: 键为“BypassTPMCheck”,值为“00000001” 键为“BypassSecureBootCheck”,值为“00000001” 在安装 Windows 11 进入到以下阶段即“现在安装”按 Shift+F10 进入到命令提示符,添加注册表键值绕过 TPM 检查;如果你是从微软官方下载的 ISO 镜像则在提示需要输入密钥阶段进入到命令提示符;之后就可以正常安装了。 REG ADD HKLM\SYSTEM\Setu
9464 0
ESXI8.0安装Windows11
|
云计算 运维 存储
aPaaS平台是什么?aPaaS与PaaS有什么区别?
aPaaS和PaaS都可以完成软件的开发和部署,都支持云端访问,而两者的差异主要体现在用户人群和使用环境不一样。
aPaaS平台是什么?aPaaS与PaaS有什么区别?
|
8月前
|
人工智能 运维 安全
开源 Remote MCP Server 一站式托管来啦!
MCP Server 的实施存在着诸多挑战,特别是在认证授权、服务可靠性和可观测性方面,Higress 作为 AI 原生的 API 网关,提供了完整的开源 MCP Server 托管解决方案,实现存量 API 到 MCP 的协议转换。即将上线的 MCP 市场,将大幅降低开发者构建 MCP Server 的时间和人力成本。
2064 107
开源 Remote MCP Server 一站式托管来啦!
|
数据采集 XML API
淘宝商品评论数据采集教程丨淘宝商品评论数据接口(Taobao.item_review)
**摘要:** 本教程指导如何使用淘宝(Taobao.item_review)接口采集商品评论。步骤包括注册开发者账号,创建应用获取API密钥,发送请求(如num_iid, page, size参数),解析JSON或XML返回数据,并遵循使用规则与安全注意事项。接口允许获取商品评论列表,含评论内容、评论者信息等,适用于数据分析和市场研究。务必保护API密钥并遵守使用政策。
1209 1
|
存储 安全 数据安全/隐私保护
数据传输中遇到问题要怎么解决
在数据传输中遇到问题时,可采取多种解决方案:使用可靠协议(如HTTPS、SFTP)、创建冗余备份、数据压缩与加密、错误检测与纠错、优化网络性能、解决数据丢失、降低延迟、提高安全性及解决带宽瓶颈。这些措施有助于确保数据传输的稳定、安全与高效。
|
Java 网络安全
springboot集成feign
springboot集成feign:如果觉得好用,不要忘记点赞关注加收藏哟!!!绝对干货
689 0
|
存储 缓存 运维
Tair 的缓存高级实践 | 学习笔记
快速学习 Tair 的缓存高级实践
Tair 的缓存高级实践 | 学习笔记
|
项目管理 开发者
业务架构图
如何画业务架构图
1059 0
|
Java 测试技术
深入探索 Java 中的 @Test 注解:优化单元测试流程的利器
在软件开发中,单元测试是保障代码质量和稳定性的重要手段之一。Java 中的 `@Test` 注解则为开发人员提供了一种方便、高效的方式来编写和执行单元测试。通过该注解,我们可以轻松地标记测试方法,自动化运行测试,并确保代码在各种情况下的正确性。本文将带您深入探索 Java 中的 `@Test` 注解,揭示其作用、用法以及在实际开发中的应用场景。