天天看点

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

正如其名所表示的,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 &lt;strong&gt;{</code><code>0</code><code>}&lt;/strong&gt; has started.</code>

<code>2</code>

<code>3</code>

<code>application_stopped=application &lt;strong&gt;{</code><code>0</code><code>}&lt;/strong&gt; 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>