`

APDPlat的日志国际化实现方式

阅读更多

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

2
1
分享到:
评论
3 楼 yangshangchuan 2013-11-13  
skzr.org 写道
如果系统要支持6种语言,这个比较繁琐。
推荐一个,以前用过的:http://cal10n.qos.ch/manual.html


代码和日志输出是不应该分开的,为什么?因为日志输出其实就是变相的代码注释,有助于理解代码,而且我在最近的项目当中基本没有代码级的注释了,全部都是日志输出,当然是有级别的,所以,APDPlat的日志国际化设计我认为是最棒的。
2 楼 liangcoder 2013-11-13  
日志国际化 有点意思。
1 楼 skzr.org 2013-11-13  
如果系统要支持6种语言,这个比较繁琐。
推荐一个,以前用过的:http://cal10n.qos.ch/manual.html

相关推荐

    应用级产品开发平台APDPlat.zip

    4)、ORM使用JPA,默认实现是Hibernate。 5)、内置搜索(OSEM)使用Compass。 6)、认证授权使用SpringSecurity。 7)、代码生成使用Freemarker。 8)、日志组件使用SLF4J和Logback。 9)、调度组件使用Quartz。 10...

    APDPlat应用级产品开发平台_共27张UML设计图

    APDPlat应用级产品开发平台是一个专门用于构建企业级应用程序的高效开发工具,它集成了多种UML(统一建模语言)设计图,旨在帮助开发者以更清晰、规范的方式规划和实现软件项目。该平台包含27张不同的UML设计图,...

    APDPlat中数据库备份恢复的设计与实现

    在APDPlat中,数据库备份恢复的设计与实现是一个关键功能,它旨在简化数据库的维护工作,通过提供web接口支持手工操作和定时调度。以下是该系统的一些核心知识点: 1. **多数据库支持**:APDPlat设计了一个统一的`...

    开源项目案例访谈整理版:APDPlat1

    社会网络方面,APDPlat的参与者共享共同的目标、语言和文化,建立信任、遵循规范并实现互惠。此外,项目中的创新活动主要来源于解决用户面临的问题,用户不仅积极咨询,甚至有公司愿意为此付费咨询。 总之,APDPlat...

    中文分词工具word-1.0,Java实现的中文分词组件多种基于词典的分词算法

    word分词是一个Java实现的中文分词组件,提供了多种基于词典的分词算法,并利用ngram模型来消除歧义。 能准确识别英文、数字,以及日期、时间等数量词,能识别人名、地名、组织机构名等未登录词。 同时提供了Lucene...

    基于Java的APDPlat应用级产品开发平台设计源码镜像站点

    该平台是一款基于Java的APDPlat应用级产品开发平台,由2902个文件组成,涵盖1750个GIF图像、282个Java源文件、269个PNG图像、187个JavaScript文件、156个CSS样式表、34个JSP页面、31个XML配置文件、30个PSD设计文件...

    中文分词词典-54w条词语

    中文分词词典 适合最大正向匹配算法使用 共计548389条词语

    2013年度中国优秀开源项目列表

    14. beego:beego是一个类似tornado的Go应用框架,采用RESTful方式实现,是一个超轻量级的框架。 15. Beetl:Beetl是新一代Java模板引擎,具备现代模板引擎的特点,如低侵入性、高性能、良好错误提示、安全输出和...

    一个非常好的检测lucene索引库的工具

    Lucene支持多种操作,如创建、更新和删除索引,以及复杂的查询语法,这个工具可能是为了辅助这些操作,提供一种便捷的方式来诊断可能出现的问题。 至于“压缩包子文件的文件名称列表”中提到的“lucene tool”,这...

    pageExtractor

    ##HtmlExtractor是一个Java实现的基于模板的网页结构化信息精准抽取组件,本身并不包含爬虫功能,但可被爬虫或其他程序调用以便更精准地对网页结构化信息进行抽取。##HtmlExtractor是为大规模分布式环境设计的,采用...

    word分词文本相似度计算.docx

    在给定的代码中,使用了`org.apdplat.word.segmentation.Word`类,表明使用了APDPlat分词库。 2. **构建词频矩阵**:对于每个文本,统计每个词的出现次数,生成一个词频向量。在代码中,`...

    EXTJS产品级别管理后台源代码

    - `app.js`或类似文件,这是EXTJS应用的主要入口点,包含了应用的配置和初始化逻辑。 - `controller`目录,存放了各种控制器文件,比如产品级别管理相关的控制器。 - `model`目录,包含了产品级别的数据模型定义。 -...

    word-1.2.jar

    中文分词,word分词,附件是编译好的word-1.2.jar版本 maven依赖: <groupId>org.apdplat <artifactId>word <version>1.2 </dependency>

Global site tag (gtag.js) - Google Analytics