416
阿里云
技术社区[云栖]
《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;
|
05 |
@BaseName ( "production" )
|
06 |
@LocaleData ( { @Locale ( "en_UK" ), @Locale ( "ja_JP" ) })
|
07 |
public enum Production {
|
12 |
DB_CONNECTION_FAILURE; |
假定你已经为不同的区域“en_UK”和“Ja_JP创建了相应的包文件。 下面是“en_UK”区域的样本包。
1 |
APPLICATION_STARTED=Application <strong>{ 0 }</strong> has started.
|
3 |
APPLICATION_STOPPED=Application <strong>{ 0 }</strong> has stopped.
|
然后,您可以实例化一个IMessageConveyor ,它注入到一个LogLoggerFactory ,通过名称实例和日志检索多个LogLogger,像下一个示例代码阐述的一样。
01 |
import java.util.Locale;
|
03 |
import org.slf4j.cal10n.LocLogger;
|
04 |
import org.slf4j.cal10n.LocLoggerFactory;
|
06 |
import ch.qos.cal10n.IMessageConveyor;
|
07 |
import ch.qos.cal10n.MessageConveyor;
|
09 |
public class MyApplication {
|
11 |
// create a message conveyor for a given locale |
12 |
IMessageConveyor messageConveyor = new MessageConveyor(Locale.UK);
|
14 |
// create the LogLoggerFactory |
15 |
LocLoggerFactory llFactory_uk = new LocLoggerFactory(messageConveyor);
|
18 |
LocLogger locLogger = llFactory_uk.getLocLogger( this .getClass());
|
20 |
public void applicationStart() {
|
21 |
locLogger.info(Production.APPLICATION_STARTED, "fooApp" );
|
25 |
public void applicationStop() {
|
26 |
locLogger.info(Production.APPLICATION_STOPPED, "fooApp" );
|
假设资源包production_en_UK.properties存在,并且底层的日志框架开启info级别日志,日志消息将用英语[英国]输出。
请注意, LogLogger是一个普通的SLF4J记录器,它有额外支持本地化的方法。 对于那些需要一个枚举作为第一个参数的额外方法, LogLogger遵循参数替换的Java约定标准,这个标准是由java.text.MessageFormat类定义的。 对于非本地化的日志,将一个字符串作为第一个参数, LogLogger如下{}约定,作为惯例让所有org.slf4j.Logger实现。
如下例子阐述了差别。
02 |
public class MyApplication {
|
04 |
IMessageConveyor messageConveyor = new MessageConveyor(Locale.UK);
|
05 |
LocLoggerFactory llFactory_uk = new LocLoggerFactory(messageConveyor);
|
06 |
LocLogger locLogger = llFactory_uk.getLocLogger( this .getClass());
|
08 |
public void someMethod() {
|
09 |
// follows the MessageFormat convention |
10 |
locLogger.info(Production.APPLICATION_STARTED, "fooApp" );
|
12 |
// follows the {} convention |
13 |
logLogger.info( "Hello {}" , name);
|
最后更新:2017-05-19 16:02:14