java 组件开发中的日志记录问题
Posted 远方的人
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 实例。然后传递给门面,
实际上门面就是通过这个实现类来打印日志的。
具体细节请百度。
以上是关于java 组件开发中的日志记录问题的主要内容,如果未能解决你的问题,请参考以下文章