2015-06-19 42 views
0

我想補充的堆棧跟蹤到錯誤日誌記錄,所以任何地方,我們有正則表達式替換登錄

try { 
    doSomething(); 
} catch (Exception ex) { 
    something(); 
    logger.severe("oops"); 
    something(); 
} 

我想有這樣的:

try { 
    doSomething(); 
} catch (Exception ex) { 
    something(); 
    logger.log(Level.SEVERE,"oops",ex); 
    something(); 
} 

異常變量可以是任何前, e等

我創建了一個正則表達式,但它是非常緩慢,並沒有像我期望的那樣工作。

正則表達式:

((?s:.)*catch\s*\(\s*Exception\s*(.+)\s*\)\s*\{(?s:.)*logger\.)severe\(((?s:.)*?)\);((?s:.)*) 

替換:

$1log(Level.SEVERE,$3,$2); $4 

它取代

try { 
    doSomething(); 
} catch (Exception ex) { 
    something(); 
    logger.severe("oops"); 
    something(); 
} 
{ 
    logger.severe("oops2"); 
} 

try { 
    doSomething(); 
} catch (Exception ex) { 
    something(); 
    logger.severe("oops"); 
    something(); 
} 
{ 
    logger.log(Level.SEVERE,"oops2",ex); 
} 
+1

所以你寫代碼來替換代碼?你的開發環境不包括查找/替換全部功能嗎? – Shar1er80

+0

不可以。我想在IDE的replace all命令中用正則表達式替換代碼。 – HamoriZ

回答

1

使用懶惰的匹配器而不是貪婪的匹配器。請參閱java.util.regex.Pattern文檔以獲取更多詳細信息。

+0

是的,謝謝我忘了用「記錄器」這個詞來使用懶惰匹配器 – HamoriZ