1. 程式人生 > >異常及日誌使用與項目打包

異常及日誌使用與項目打包

最新 rac clas ssa led html round div []

你會捕捉異常嗎?

異常簡要信息(僅有出錯原因):

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的版本及以上支持使用變量參數 引用:http://www.importnew.com/7450.html

你會項目打包嗎?

使用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

異常及日誌使用與項目打包