2011-04-07 113 views
2

我有一個相當大的程序(C#),需要通過添加一個選項來關閉日誌功能來擴展它的功能。該程序將目錄位置作爲參數存儲日誌。如果args [0]爲空,我希望它不記錄任何內容。目前該方案具有這樣的線嵌套了這一切:標誌設置後跳過代碼行

DiagnosticLog.WriteLine("\t\t----Verifying Plugins were installed correctly----"); 

我的第一個想法就是能創建和該功能中的全局標誌做了檢查,並運行該行,如果還沒有設置。這樣我就可以避免在代碼中圍繞這些行的每一行使用相同的if語句。在運行期間是否有更聰明的方法來「關閉」這些線?

+2

這實際上是與c + +有關嗎? – Blorgbeard 2011-04-07 16:36:49

+0

僅僅因爲我的代碼是用c#編寫的,並不意味着它不能由使用C++的人來回答。它可以在兩個方面解決。事實上,它也可以在c中解決。 – 2011-04-07 16:43:58

+0

重新標記爲'c#' - 標籤的全部要點將您的問題定位到正確的受衆羣體,請儘量讓它們適當。 – GrahamS 2011-04-07 16:47:56

回答

1

你可以實現一個版本的DiagnosticLog實際上並沒有任何記錄,而在你的日誌版本代替使用,如果你不希望記錄。假設你知道當你創建DiagnosticLog的實例(我從你問的方式收集的,你做的)時是否要記錄。

1

爲什麼不只是調用一個日誌函數來檢查arg是否爲空?

public void WriteLine(string log) { 
    if (!firstArgIsEmpty) { 
     // Print to file. 
    } 
} 
1

如何有關修改DiagnosticLog.WriteLine功能採取具有作爲默認值true第二個參數doActualLogbool)?對DiagnoticLog進行一些非常小的修改以考慮此值。如果你想要實際的日誌記錄發生,你可以決定在DiagnosticLog的實例化。

1

默認情況下,您可以將enabled標誌添加到DiagnosticLogtrue。如果args [0]爲空,請致電DiagnosticLog.Disable()將其設置爲false。然後在WriteLine和其他任何記錄功能中,在進行實際記錄之前檢查enabled

1

您可以創建一個屬性

public bool Log { get; set; } 

string logFilePath; 
public string LogFilePath 
{ 
    get { return logFilePath; } 
    set 
    { 
     logFilePath = ValidateLogFilePath(value); 
     Log = logFilePath.Length > 0; 
    }    
} 

public void WriteLine(string line) 
{ 
    if (!Log) 
     return; 
    //... 
} 

如果你犯了一個布爾值屬性,指示記錄是否正在發生,那麼你也可以用它來跳過沒有必要的,如果記錄不存在的其他代碼段。如果您只是爲了記錄目的而構建任何長字符串,這可能很有用。

if (DiagnosticLog.Log) 
{ 
    DiagnosticLog.WriteLine("The following plugins were not installed:\r\n\t" + 
      string.Join("\r\n\t", GetMissingPluginNames())); 
} 
1

如何結合使用System.Diagnostics.TraceListener類與System.Diagnostics.TraceSwitch?你似乎在後面的功能已經烘烤。