MyBatis Generator代码分析二(日志)
更新时间:2018-06-02 | 阅读量(1,282)
【原创文章,转载请注明原文章地址,谢谢!】
####org.mybatis.generator.internal.util.messages.Message类:####
用于获得消息做国际化,使用的bundle是org.mybatis.generator.internal.util.messages.messages;
小技巧,在输出大量信息的时候(比如help消息)
- 先创建一个key:Usage.Lines=27,得到一共多少行消息,
- 然后用for循环遍历每一行消息输出:Usage.0~Usage.27
####org.mybatis.generator.logging:####
放的是MGB日志相关内容;在MBG中,日志支持两种,一种是Log4J,一种是JDK的logging,而这个包里面的类就是对日志的一个门面。我的理解,在MBG出来的时候,还没有slf4j,所以没有用slf4j,感觉这个包其实比较没太大意义;
- AbstractLogFactory:一个日志工厂的接口,提供了一个getLog(Class)方法对传入的Class返回一个Log;
- Log:对日志器的接口(具体Logger的门面);提供了通用的日志器方法:
- isDebugEnabled:是否debug级别;
- error:记录错误
- debug:记录debug信息;
- warn:记录错误信息;
- Log4jImpl:对Log4J的一个适配;简单对比一个方法:
public JdkLoggingImpl(Class> clazz) {
log = Logger.getLogger(clazz.getName());
}
public boolean isDebugEnabled() {
return log.isLoggable(Level.FINE);
}
public void error(String s, Throwable e) {
LogRecord lr = new LogRecord(Level.SEVERE, s);
lr.setSourceClassName(log.getName());
lr.setThrown(e);
log.log(lr);
}
- JdkLoggingImpl:对JDK的logging的适配;简单的看一个方法就明白:
public Log4jImpl(Class> clazz) {
log = Logger.getLogger(clazz);
}
public boolean isDebugEnabled() {
return log.isDebugEnabled();
}
public void error(String s, Throwable e) {
log.error(s, e);
}
- LogFactory:对Log工厂的一个包装;在LogFactory中持有一个AbstractLogFactory引用;
在LogFactory中持有两个实现了AbstractLogFactory的静态内部类:
- JdkLoggingLogFactory:对JDKlogging的包装类,其创建的Logger其实就是JdkLoggingImpl;
- Log4jLoggingLogFactory:对Log4J的包装类,其创建的Logger其实就是Log4jImpl;
在MBG中,都是使用LogFactory的LogFactory.getLog(Class targetLogClass)直接获取对一个Class的日志对象;
这个日志工厂在MBG中是固定的,不容易直接扩展;