异常及日志使用与项目打包

你会捕捉异常吗?

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

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() + "\n");  
15             StackTraceElement[] messages = e.getStackTrace();  
16             int length = messages.length;  
17             for (int i = 0; i < length; i++) {  
18                 stringBuffer.append("\t"+messages[i].toString()+"\n");  
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

 

 

 

posted @ 2017-08-24 15:38  简笔话_Golden  阅读(292)  评论(0编辑  收藏  举报