使用 new AipImageSearch 初始化实例时, 源代码会对 Log4j Logger root 动态增加一个Appender(ConsoleAppender)
protected BaseClient(String appId, String apiKey, String secretKey) {
this.appId = appId;
this.aipKey = apiKey;
this.aipToken = secretKey;
isAuthorized = new AtomicBoolean(false);
isBceKey = new AtomicBoolean(false);
accessToken = null;
expireDate = null;
state = new AuthState();
// init logging
String log4jConf = System.getProperty(AipClientConst.LOG4J_CONF_PROPERTY);
if (log4jConf != null && !log4jConf.equals("")) {
PropertyConfigurator.configure(log4jConf);
}
else {
BasicConfigurator.configure();
}
}
使用者很容易会让程序逻辑进入到 BasicConfigurator.configure(); 这个方法里面。
static public void configure() {
Logger root = Logger.getRootLogger();
root.addAppender(new ConsoleAppender(new PatternLayout(PatternLayout.TTCC_CONVERSION_PATTERN)));
}
很明显, 你们提供的包对使用方项目日志产生了非常大的影响, 你们不应该这样来设计开发。
建议: 你们应该使用日志门面框架来完成日志的记录, 比如slf4j这样的框架, 而不应该在第三方包里面使用具体日志实现框架。非常感谢