閱讀416 返回首頁    go 京東網上商城


《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 }


轉載自 並發編程網 - ifeve.com

最後更新:2017-05-19 16:02:14

  上一篇:go  《Spark1.6.1官方文檔》Spark1.6.1操作指南
  下一篇:go  《SAFe 4.0參考指南:精益軟件與係統工程的規模化敏捷框架》SAFe原則