2013-09-16 11 views
6

ich nach einem Weg suchen ausdrucksstarke Nachrichten zu protokollieren, wenn ich fangen eine Ausnahme mit NLog 2.0.1, so etwas wieNLog Argumente für Errormeldung

try { 
    .... 
} 
catch(Exception ex) { 
    logger.ErrorException("Error with query {0}", query, ex); 
} 

Aber NLog unterstützt es nicht. Andere Formen, die mir passiert haben, sind

logger.ErrorException( String.Format("Error with query {0}", query)) , ex); 

oder

logger.Error("Error with query {0} {1} {2}", query, ex.Message, ex.StackTrace); 

oder

logger.Error("Error with query {0}", query); 
logger.ErrorException("", ex); 

oder

LogEventInfo ei = new LogEventInfo(LogLevel.Error, logger.Name, null, 
         "Error with query {0}", new object[] { query }, ex); 
logger.Log(ei); 

Aber keiner scheint so einfach wie Anrufe zu logger.Error() Im Moment ist die erste Option meine favority trotz Format eine Zeichenfolge, wird vielleicht nicht verwendet werden:

  • für exceptions die zweite Option nicht die Layout-Optionen.
  • Die dritte erstellt zwei Einträge im Protokoll und wird möglicherweise verwirrend sein.
  • die vierte Option ist viel weniger klar.

Es gibt noch mehr?

+1

'String.Format (" Fehler mit Abfrage% s ", Abfrage)' Ist das C#? –

+0

ups .. Ich machte mit Java aus. Bearbeitet – Narkha

+2

Warum nicht einfach eine Erweiterungsmethode schreiben? –

Antwort

3

Update

Dies ist möglich, da NLog 4.0

logger.Error(ex, "Error with query {0}", query); 

Siehe news post - consistent logging of exceptions

+0

Großartiges Feature! Ich akzeptiere die Antwort nicht, weil es für NLog 2.0.1 gemacht wurde, aber jetzt ist es gut, dass die Bibliothek verbessert wurde. – Narkha

+0

Sicher, obwohl ich unbeantwortete Fragen nicht mag – Julian