zoukankan      html  css  js  c++  java
  • 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 实例。然后传递给门面,

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

    具体细节请百度。

      

  • 相关阅读:
    _ 下划线 Underscores __init__
    Page not found (404) 不被Django的exception中间件捕捉 中间件
    从装修儿童房时的门锁说起
    欧拉定理 费马小定理的推广
    线性运算 非线性运算
    Optimistic concurrency control 死锁 悲观锁 乐观锁 自旋锁
    Avoiding Full Table Scans
    批量的单向的ssh 认证
    批量的单向的ssh 认证
    Corrupted MAC on input at /usr/local/perl/lib/site_perl/5.22.1/x86_64-linux/Net/SSH/Perl/Packet.pm l
  • 原文地址:https://www.cnblogs.com/zhangchenglzhao/p/10072429.html
Copyright © 2011-2022 走看看