正如其名所表示的,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>