2017-06-13 2 views
0

I Allzweck Log-Methode haben, die Einträge im Log-Datei, Ereignisprotokoll usw.Logging-Methode mit String.Format Capability

public static void Log(string logEntry) 
{ 
    // Write DateTime and logEntry to Log File, Event Log, etc. 
} 

ich Überlastung geschaffen bieten String.Format() Funktionalität mit dem folgenden schreibt:

public static void Log(params object[] logEntry) 
{ 
    // Purpose: Overload Log method to provide String.Format() functionality 
    //   with first parameter being Format string. 
    // Example: Log("[{0:yyyy-MM-dd}] Name: {1}, Value: {2:#,##0.00}", DateTime.Now, "Blah, Blah, Blah", 12345.67890) 

    string formatString = logEntry[0].ToString(); 

    object[] values = new object[logEntry.Length - 1]; 

    for (int i = 1; i < logEntry.Length; i++) 
    { 
     values[i - 1] = logEntry[i]; 
    } 

    Log(String.Format(formatString, values)); 
} 

das funktioniert gut, aber gibt es eine bessere Möglichkeit, verbleibende Array-Elemente verweisen auf die String.Format() Funktion zu übergeben? Oder besser, um Element 0 aus dem Array zu entfernen?

Ich weiß, ich könnte auch verwenden Log nur (String.Format (..., aber für mehr formale Zwecke bin bereitstellt.

Antwort

4

Sie

public void Log(string message, params object[] args) 

oder noch besser nutzen könnten, verwenden Sie ein bestehenden Rahmen zB NLog oder Log4Net, die APIs wie

public void Log(LogLevel level, string message, param object[] args) 

und

public void Log(LogLevel level, Exception exception, string message, param object[] args) 
haben
+0

Danke, manchmal wird die einfachste Lösung übersehen! –

3

Ich würde die Parameter String.Format() entsprechen.

public static void Log(string logEntry) 
{ 
    Log(logEntry, null); 
} 

public static void Log(string logEntry, params object[] values) 
{ 
    // Do whatever extra processing you need here. 
    Log(String.Format(logEntry, values)); 
}