異常及日誌使用與項目打包
你會捕捉異常嗎?
異常簡要信息(僅有出錯原因):
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打包: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
異常及日誌使用與項目打包