2013-06-21 48 views
1

我寫了一個自定義的Log4j Appender負責發送日誌信息給第三方服務asyncronslyJava:如何找到/知道代碼是否有任何問題呢?

所以這種預期被稱爲每毫秒

這是我的自定義追加程序代碼

我在這段代碼上跑了Findbugs,它沒有報告任何異常。

但在將此代碼發佈到生產之前,我如何知道此代碼是否有任何問題。

有沒有用於此目的的任何工具?

請分享你的想法,在此先感謝。

package com; 

import java.util.ArrayList; 
import java.util.Iterator; 

import org.apache.log4j.AppenderSkeleton; 
import org.apache.log4j.spi.LoggingEvent; 

public class MyAppender extends AppenderSkeleton { 

    public MyAppender() { 

    } 

    public void append(LoggingEvent event) { 
     ArrayList<LoggingEvent> buffer = new ArrayList<LoggingEvent>(); 
     buffer.add(event); 
     flushBuffer(buffer); 
    } 

    public void flushBuffer(ArrayList<LoggingEvent> buffer) { 
     for (Iterator<LoggingEvent> i = buffer.iterator(); i.hasNext();) { 
      try { 
       LoggingEvent logEvent = (LoggingEvent) i.next(); 
       String messageRecievied = (String) logEvent.getMessage(); 
       //System.out.println(messageRecievied); 

      } catch (Exception e) { 

      } 

     } 

    } 

    @Override 
    public void close() { 

    } 

    @Override 
    public boolean requiresLayout() { 

     return false; 
    } 

} 
+1

http://codereview.stackexchange.com/ – austin

+1

@austin我不同意 - 他問:「我怎麼找到我的代碼中的錯誤」,而不是「請找我的代碼中的錯誤」 –

+1

有沒有這樣的工具,據我所知 – Bohemian

回答

3

測試它。

找出用例是什麼,包括邊緣情況。
進行單元測試。

想想部署環境中可能會破壞代碼的任何變量。
創建集成測試以確保這些場景都能正常工作。

創建一個假接收器並對其進行測試。
您需要爲接收器創建測試以確保其正確驗證。

+0

謝謝,我很擔心內存泄漏。 – Pawan

+0

@PreethiJain要查找內存泄漏,您可以編寫負載測試並檢查內存的行爲。 – Puce

0

有可能不存在這樣的工具,否則這將是人工智能和會寫整個代碼,而無需你;-)

但是,如果可能的話寫單元測試。通過良好的單元測試,您可以部署許多任務,並且第一次運行時沒有任何錯誤。 (該工具稱爲JUnit)

第二工具:EclEmma eclipse插件: 它顯示了junit測試覆蓋率。你有80%或更多的保險?沒有? (恥辱在你;-))

看看appache log4j的src,我記得他們有一些單元測試,也許有一些現有的appender。

+0

:)好一個AlexWien,我不想失去我的工作,因爲這樣的工具存在。 – Pawan

+0

我校老師22年前說過,以後的程序會自動編寫,只是一點點的模塊安排。我們仍然有我們的工作... – AlexWien

+0

計算機程序員付出相當好。爲什麼?因爲它是一個高度熟練(大部分)手動過程。具有諷刺意味的是,他們從事的是自動化事務。 – Raedwald

1

能夠預測隨意輸入結果的任意代碼是an NP-Complete的問題。因此,沒有100%的可靠方法可以保證代碼沒有問題(至少在宇宙熱死亡之前,因此,你完全處於風險管理領域。)

所以你該怎麼辦?

TEST 單位和系統測試可以幫助給你信心,你的代碼是沒有錯誤。使用類似JUnit做到這一點。有了這樣的套房,你可以給特定的輸入和檢查,以確保輸出是有效的但請注意,這將只針對您提供的輸入進行測試,而不是針對任何輸入,因此即使是非常好的測試套件也可能會導致錯誤 置信度。因此,第二道防線是......

METRICS 確保您正在測量並能夠看到您所能做的一切。如果您將新代碼投入生產並寫入數據庫增加十倍......您可能會遇到問題。或者也許你的錯誤信息速度增加 - 或者什麼也沒有。除非您監控關鍵指標,否則無法確定系統的健康狀況。但是如果出現問題會發生什麼?

功能控制 在任何複雜的系統中,如果您要添加新功能,對這些功能進行控制是一個不錯的主意。把這看作是一個全局切換,讓你可以在舊代碼路徑和新代碼路徑之間進行選擇。例如:

public void append(LoggingEvent event) { 
    if (FeatureController.isActive(this.FEATURE_NAME)){ 
     ArrayList<LoggingEvent> buffer = new ArrayList<LoggingEvent>(); 
     buffer.add(event); 
     flushBuffer(buffer); 
    } 
} 

這可以讓您快速關閉新功能,如果它們導致問題。

相關問題