文档章节

APDPlat的日志国际化实现方式

杨尚川
 杨尚川
发布于 2014/01/29 01:39
字数 500
阅读 257
收藏 2

APDPlat使用slf4j来做日志框架,由于slf4j不支持国际化日志,所以APDPlat使用自定义的APDPlatLogger类来支持国际化日志。使用方法如下:

 

1、构造日志对象

private static final APDPlatLogger LOG = new APDPlatLogger(SystemListener.class);

 

 2、输出多语言日志

LOG.info("停止内存监视线程");
LOG.info("Stop memory monitor thread", Locale.ENGLISH);
...

 

 

可以看到,APDPlatLogger类是根据LOG.info方法的第二个参数来指定本条日志所使用的语言,那么这多条LOG.info日志是否都会输出呢?答案是不会都输出,只会输出一种语言的日志,那么如何切换语言呢?设计方法如下:

 

1、APDPlatLogger类实现了org.slf4j.Logger接口

public class APDPlatLogger implements Logger,Serializable{

 

2、在LOG.info方法的调用中,如果没有指定语言,则默认假定本条日志使用中文Locale.CHINA描述,APDPlatLogger 在输出每个等级的每条日志的时候都会判断是否应该输出,如何判断呢?

    @Override
    public void info(String msg) {
        info(msg, Locale.CHINA);
    }
    
    public void info(String msg, Locale locale) {
        if(shouldOutput(locale)){
            log.info(msg);
        }
    }

 

3、APDPlatLogger类有一个configLanguage字段,用来指定系统应该输出什么语言的日志,使用Locale对象的getLanguage()方法获取语言,configLanguage字段的值是怎么指定的呢?

    private boolean shouldOutput(Locale specifyLanguage){
        if(configLanguage==null){
            return true;
        }
        return specifyLanguage.getLanguage().equals(configLanguage.getLanguage());
    }

 

4、在系统启动的时候,SystemListener类会设置APDPlatLogger类的configLanguage字段的值,configLanguage字段的值来自哪里呢?

//指定日志输出语言
APDPlatLogger.setConfigLanguage(getLogLanguage());

public static Locale getLogLanguage(){
   String language = getProperty("log.locale.language");
   return Locale.forLanguageTag(language);
}

 

5、configLanguage字段的值来自config.properties或config.local.properties配置文件,在配置文件中指定了使用什么语言的日志

#输出日志语言配置
#语言可选值有
#zh
#en
#fr
#de
#it
#ja
#ko
#中文
log.locale.language=zh
#英文
#log.locale.language=en

 

 

 

APDPlat托管在Github

© 著作权归作者所有

杨尚川

杨尚川

粉丝 1103
博文 220
码字总数 1624053
作品 12
东城
架构师
私信 提问
APDPlat拓展搜索之集成ElasticSearch

APDPlat充分利用Compass的OSEM和ORM integration特性,提供了简单易用且功能强大的内置搜索特性。 APDPlat的内置搜索,在设计简洁优雅的同时,还具备了强大的实时搜索能力,用户只需用注解的...

杨尚川
2014/02/01
292
2
APDPlat拓展搜索之集成Solr

APDPlat充分利用Compass的OSEM和ORM integration特性,提供了简单易用且功能强大的内置搜索特性。 APDPlat的内置搜索,在设计简洁优雅的同时,还具备了强大的实时搜索能力,用户只需用注解的...

杨尚川
2014/02/01
662
0
APDPlat的系统启动和关闭流程剖析

APDPlat接管了Spring的启动关闭权,为各种运行其上的开源框架和类库的无缝集成提供了支持。 当然,大家都知道,一个JAVA EE Web应用的入口点是web.xml,APDPlat当然也不例外,我们看看APDPl...

杨尚川
2014/02/03
414
0
APDPlat如何自动建库建表并初始化数据?

APDPlat共支持10种数据库:DB2、DERBY、H2、HSQL、INFORMIX、MYSQL、ORACLE、POSTGRESQL、SQLSERVER、SYBASE。 数据库的默认配置信息在文件APDPlatCore/src/main/resources/org/apdplat/db.p...

杨尚川
2014/02/08
360
0
基于word分词提供的文本相似度算法来实现通用的网页相似度检测

实现代码:基于word分词提供的文本相似度算法来实现通用的网页相似度检测 运行结果: 检查的博文数:128 1、检查博文:192本软件著作用词分析(五)用词最复杂99级,相似度分值:Simple=0.96...

杨尚川
2015/05/28
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

使用CSS自定义属性构建骨架屏

写在前面 几天前看到薄荷前端团队分享的《前端骨架屏方案小结》,突然回想起一年前看到的max bock写的《Building Skeleton Screens with CSS Custom Properties》,翻译整理写下出此文,分享...

前端老手
昨天
9
0
Docker常用命令小记

除了基本的<font color="blue">docker pull</font>、<font color="blue">docker image</font>、<font color="blue">docker ps</font>,还有一些命令及参数也很重要,在此记录下来避免遗忘。 ......

程序员欣宸
昨天
9
0
MAT使用-jvm内存溢出问题分析定位

1.MAT简介: MAT 全称 Eclipse Memory Analysis Tools 是一个分析 Java堆数据的专业工具,可以计算出内存中对象的实例数量、占用空间大小、引用关系等,看看是谁阻止了垃圾收集器的回收工作,...

xiaomin0322
昨天
5
0
内网和外网之间的通信(端口映射原理)

首先解释一下“内网”与“外网”的概念: 内网:即所说的局域网,比如学校的局域网,局域网内每台计算机的IP地址在本局域网内具有互异性,是不可重复的。但两个局域网内的内网IP可以有相同的...

Jack088
昨天
6
0
3.深入jvm内核-原理、诊断与优化-4. GC算法和种类

一、GC算法和种类 GC的概念 GC算法 引用计数法 标记清除 标记压缩 复制算法 可触及性 Stop-The-World GC的对象是堆空间和永久区 引用计数法 老牌垃圾回收算法 通过引用计算来回收垃圾 使用者...

hexiaoming123
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部