zoukankan      html  css  js  c++  java
  • 异常及日志使用与项目打包

    你会捕捉异常吗?

    异常简要信息(仅有出错原因):

    Exception.getMessage()    或   Exception.toString ()

    异常详细信息(有具体出错的行号):

              Exception.printStackTrace()方法      

             Exception.getStackTrace()方法返回一个StackTraceElement对象的集合

     1      /**
     2      * 获取详细的异常信息的工具方法
     3      */
     4     public static String getTrace(Throwable t) {
     5         StringWriter stringWriter = new StringWriter();
     6         PrintWriter writer = new PrintWriter(stringWriter);
     7         t.printStackTrace(writer);
     8         StringBuffer buffer = stringWriter.getBuffer();
     9         return buffer.toString();
    10     }
    11     
    12 
    13     public String getExceptionDetail(Exception e) {  
    14             StringBuffer stringBuffer = new StringBuffer(e.toString() + "
    ");  
    15             StackTraceElement[] messages = e.getStackTrace();  
    16             int length = messages.length;  
    17             for (int i = 0; i < length; i++) {  
    18                 stringBuffer.append("	"+messages[i].toString()+"
    ");  
    19             }  
    20             return stringBuffer.toString();  
    21     }  

    你会使用日志打印功能吗?

    SLF4J(Simple logging Facade for Java):不是一个真正的日志实现,而是一个抽象层 。

    1.它允许你在后台使用任意一个日志类库。使得你的程序独立于任意特定的日志类库,依赖于特定类可能需要不同与你已有的配置,并且导致更多维护的麻烦

     

    2.SLF4J提供了基于占位符的日志方法

          (1)不再需要冗长的级别判断,提高了代码可读性。

         (2)通过使用SLF4J,你可以在运行时延迟字符串的建立,这意味着只有需要的String对象才被建立。这不仅降低了你代码中字符串连接次数,而且还节省了新建的String对象。更少的暂时的字符串意味着GC这意味着你的应用程序有为更好的吞吐量和性能。

    slf4j巧妙的解决了这个问题:先传入带有占位符的字符串,同时把其他参数传入,在slf4j的内容部实现中,如果级别合适再去用传入的参数去替换字符串中的占位符,否则不用执行
     例如:
    logger.info("{} is {}", new String[]{“x",“y"});
    logger.debug("Processing trade with id: {} and symbol : {} ", id, symbol);
     
    public void debug(String format, Object arg1, Object arg2) {
        if (logger.isDebugEnabled()) {
            FormattingTuple ft = MessageFormatter.format(format, arg1, arg2);
            logger.log(FQCN, Level.DEBUG, ft.getMessage(), ft.getThrowable());
        }
    }
    注: 使用SLF4J,你不仅需要包含SLF4J的API jar包,例如 slf4j-api-1.6.1.jar,还需要相关Jar包,这取决于你在后台使用的日志类库。
    如果你想要使用和Log4J 一起使用SLF4J  ,你需要包含以下的Jar包在你的classpath中,取决于哪个SLF4J和你在使用的Log4J的版本。例如:
    • slf4j-api-1.6.1.jar – JAR for SLF4J API
    • log4j-1.2.16.jar – JAR for Log4J API
    • slf4j-log4j12-1.6.1.jar – Log4J Adapter for SLF4J
     如果使用Maven去管理你的项目依赖,你只需要包含SLF4J JAR包,maven会包含它的依赖的相关包。
     SLF4J 1.7的版本及以上支持使用变量参数
     

     

    你会项目打包吗?

     

    打jar包:mvn package    mvn clean package(推荐)

    运行jar包:java -jar  jar文件的名字

     
     

    使用maven打包:mvn package   mvn clean package?

      如果其他方式修改jar包中的内容而不修改源代码,mvn package将不能得到最新的jar或其他包
      但最保险还是用 mvn clean install 生成最新的jar包或其他包
      若不想用mvn clean又想保证jar包最新, 建议使用命令mvn package -Djar.forceCreation,这个参数应该是强制创建新的jar包;

     通过看源码中:如果满足以下任一情况,会认为jar包不是最新的:
    1. jar包不存在(其实就是mvn clean的效果)
    2. 传入比较的文件资源不存在
    3. Resource with unknown modification date found,资源的修改时间未知
    4. Resource with newer modification date found,jar包的最后修改时间比资源的最后修改时间早

    注:

    mvn package 会调用 maven-jar-plugin 这个插件进行打包。

    mvn clean package -X 就能看到非常丰富的DEBUG信息。

    引用:http://blog.csdn.net/abc86319253/article/details/44019881

    歪门邪道的打包方法:

    http://www.cnblogs.com/dayou123123/p/6845432.html

  • 相关阅读:
    网络资源
    为什么MVC不是一种设计模式? ---比较Backbone和Ext4.x在MVC实现上的差异
    Developing Backbone.js Applications
    【实例】爬虫:下载图片
    scheme语言编写执行
    HDU 4403 A very hard Aoshu problem (DFS暴力)
    【Python】输出程序运行的百分比
    SQL_字符操作函数
    Linux mm相关的问题
    java中Volatile修饰符的含义
  • 原文地址:https://www.cnblogs.com/zhaojinxin/p/7423410.html
Copyright © 2011-2022 走看看