正如其名所表示的,cal10n專注于java應用程式本地化/國際化的問題。
在cali0n上,附帶slf4j-ext-1.7.21.jar的org.slf4j.cal10n包的頂部增加了一個非常薄的一層包以提供本地化的日志記錄。
讓我們假設你已經在你的應用程式中定義本地化的消息。 按照cal10n的理念,你已經在枚舉類型production裡為消息聲明了keys 。
<code>01</code>
<code>import</code> <code>ch.qos.cal10n.localedata;</code>
<code>02</code>
<code>import</code> <code>ch.qos.cal10n.locale;</code>
<code>03</code>
<code>import</code> <code>ch.qos.cal10n.basename;</code>
<code>04</code>
<code>05</code>
<code>@basename</code><code>(</code><code>"production"</code><code>)</code>
<code>06</code>
<code>@localedata</code><code>( { </code><code>@locale</code><code>(</code><code>"en_uk"</code><code>), </code><code>@locale</code><code>(</code><code>"ja_jp"</code><code>) })</code>
<code>07</code>
<code>public</code> <code>enum</code> <code>production {</code>
<code>08</code>
<code>application_started,</code>
<code>09</code>
<code>application_stopped,</code>
<code>10</code>
<code>...</code>
<code>11</code>
<code>db_connection,</code>
<code>12</code>
<code>db_connection_failure;</code>
<code>13</code>
<code>}</code>
假定你已經為不同的區域“en_uk”和“ja_jp建立了相應的封包件。 下面是“en_uk”區域的樣本包。
<code>1</code>
<code>application_started=application <strong>{</code><code>0</code><code>}</strong> has started.</code>
<code>2</code>
<code>3</code>
<code>application_stopped=application <strong>{</code><code>0</code><code>}</strong> has stopped.</code>
<code>4</code>
<code>5</code>
然後,您可以執行個體化一個imessageconveyor ,它注入到一個logloggerfactory ,通過名稱執行個體和日志檢索多個loglogger,像下一個示例代碼闡述的一樣。
<code>import</code> <code>java.util.locale;</code>
<code>import</code> <code>org.slf4j.cal10n.loclogger;</code>
<code>import</code> <code>org.slf4j.cal10n.locloggerfactory;</code>
<code>import</code> <code>ch.qos.cal10n.imessageconveyor;</code>
<code>import</code> <code>ch.qos.cal10n.messageconveyor;</code>
<code>public</code> <code>class</code> <code>myapplication {</code>
<code>// create a message conveyor for a given locale</code>
<code>imessageconveyor messageconveyor = </code><code>new</code> <code>messageconveyor(locale.uk);</code>
<code>14</code>
<code>// create the logloggerfactory</code>
<code>15</code>
<code>locloggerfactory llfactory_uk = </code><code>new</code> <code>locloggerfactory(messageconveyor);</code>
<code>16</code>
<code>17</code>
<code>// create a loclogger</code>
<code>18</code>
<code>loclogger loclogger = llfactory_uk.getloclogger(</code><code>this</code><code>.getclass());</code>
<code>19</code>
<code>20</code>
<code>public</code> <code>void</code> <code>applicationstart() {</code>
<code>21</code>
<code>loclogger.info(production.application_started, </code><code>"fooapp"</code><code>);</code>
<code>22</code>
<code>// ..</code>
<code>23</code>
<code>24</code>
<code>25</code>
<code>public</code> <code>void</code> <code>applicationstop() {</code>
<code>26</code>
<code>loclogger.info(production.application_stopped, </code><code>"fooapp"</code><code>);</code>
<code>27</code>
<code>// ...</code>
<code>28</code>
<code>29</code>
假設資源包production_en_uk.properties存在,并且底層的日志架構開啟info級别日志,日志消息将用英語[英國]輸出。
如下例子闡述了差别。
<code>import</code> <code>...;</code>
<code>public</code> <code>void</code> <code>somemethod() {</code>
<code>// follows the messageformat convention</code>
<code>// follows the {} convention</code>
<code>loglogger.info(</code><code>"hello {}"</code><code>, name);</code>