2013-09-16 12 views
6

szukam sposobu, aby zalogować ekspresyjne wiadomości kiedy złapać wyjątek z NLog 2.0.1, cośnlog argumenty za errorException wiadomości

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

Ale NLog nie obsługuje. Inne formy, które zdarzyło mi się

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

lub

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

lub

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

lub

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

Ale nikt wydaje się tak proste jak wywołania logger.Error() Obecnie pierwsza opcja jest mój favority mimo formatu ciąg znaków, który może nie będzie używany:

  • druga opcja nie korzystać z opcji układu dla exceptions.
  • Trzeci tworzy dwa wpisy w dzienniku i być może będzie mylący.
  • Czwarta opcja jest znacznie mniej czytelna.

Jest coś więcej?

+1

'String.Format (" Błąd z zapytaniem% s ", zapytanie)' Czy to C#? –

+0

ups .. Zrobiłem z java. Edytowane – Narkha

+2

Dlaczego po prostu nie napisać metody rozszerzenia? –

Odpowiedz

3

Update

Jest to możliwe, ponieważ nlog 4,0

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

Zobacz news post - consistent logging of exceptions

+0

Świetna funkcja! Nie akceptuję odpowiedzi, ponieważ została ona wykonana dla NLog 2.0.1, ale dobrze jest, że biblioteka uległa poprawie. – Narkha

+0

Oczywiście, chociaż nie lubię pytań bez odpowiedzi – Julian

Powiązane problemy