java 组件开发中的日志记录问题

今天帮别人写封装几个url 请求,打成jar 包,可以以java接口的方式提供给外部访问。 

遇到两个问题: 

1. 是否把依赖的jar包也 打入 我要生成的jar包中,如果你不打入,别人直接调用接口会报错。如果你打入可能会和使用该jar包的项目发生冲突,因为别人可能已经引入了相关jar包。

   自己可以根据要求来定: 如果不打就需要把jar和pom文件都提供给需求提出者。 如果需要可以使用maven 插件 maven-assembly-plugin. 

<plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-assembly-plugin</artifactId>
          <configuration>
            <archive>
              <manifest>
                <mainClass>com.fds.App</mainClass>
              </manifest>
            </archive>
            <descriptorRefs>
              <descriptorRef>jar-with-dependencies</descriptorRef>
            </descriptorRefs>
          </configuration>
        </plugin>
然后使用执行maven 命令
package assembly:single  就会生成一个  后缀为 -jar-with-dependency.jar 的包。。 

 

2 . 组件开发中如何记录日志

  我们知道java 开发要引入很多jar 包,每个jar包都需要日志。 而在java 世界中有很多日志组件,比如 log4j, logback 等。 

  如果每个jar包开发者都弄一套自己的日志系统,那引入这些jar 把项目岂不是乱套了。  

  于是网上百度了下:

    原来我们在组件开发的时候只需要一个门面就行。就相当于一套完备的日志接口。

    然后我们使用这个门面做日志处理。然后再由具体的组件引用者决定使用具体的哪个日志系统。

    所以我们在使用这些日志组件时需要提供一个具体的日志实现。

  目前的门面: common-logging  ,  slf4j  , JCL(这个是最初的门面)

  那么这些门面是怎么知道用哪个具体的日志实现呢???

  答案: 网上找的,具体没研究, 。大致意思是门面会在 classpath 下查找StaticLoggerBinder,每个具体日志实现都会提供一个StaticLoggerBinder 类,  并且提供一个实现类,由该类来产生Logger 实例。然后传递给门面,

    实际上门面就是通过这个实现类来打印日志的。

具体细节请百度。

 

  

 

posted on 2018-12-05 18:01  远方的人  阅读(303)  评论(0编辑  收藏  举报

导航