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