java-sdk包日志设计不当?
jkxsl12369 发布于2018-12 浏览:4332 回复:4
1
收藏

使用 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这样的框架, 而不应该在第三方包里面使用具体日志实现框架。非常感谢

收藏
点赞
1
个赞
共4条回复 最后由192******42回复于2023-10
#6192******42回复于2023-10

0
#4打发看健康回复于2019-01

更改源码重新打包或者单独给sdk提供一个配置文件

参考: 

https://wangyongxu.github.io/2019/01/30/%E7%99%BE%E5%BA%A6sdk%E6%97%A5%E5%BF%97%E9%97%AE%E9%A2%98/

0
#3wanglu51364回复于2019-01

太睿智了,我初始化一次client,给我多打印了一遍日志,现在我每个sql语句都有好几十遍日志了,动别人的日志很好玩吗?还没地方给你配置,只能下源码手动改了。

0
#2独孤焰坤回复于2019-01

你自己代码有问题

0
TOP
切换版块