《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  {
08APPLICATION_STARTED,
09APPLICATION_STOPPED,
10...
11DB_CONNECTION,
12DB_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}
 
  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值