2013-04-14 12 views

Odpowiedz

4

Jeśli masz już rozwiązanie rejestrowania można użyć projektu ServiceStack.Logging.Elmah. Jest dostępny przez NuGet.

Wyjątki, błędy i połączenia śmiertelne będą rejestrowane w Elmah oprócz pierwotnie zamierzonego rejestratora. W przypadku wszystkich pozostałych typów dzienników używany jest tylko oryginalny program rejestrujący.

Więc jeśli już przy użyciu log4net następnie można po prostu skonfigurować ELMAH jak ten

ElmahLogFactory factory = new ElmahLogFactory(new Log4NetFactory()); 

Jeśli nie chcesz, by zakończyć się na istniejącym dzienniku wtedy można tylko badania dodając ELMAH do dowolnego ASP. Strona internetowa NET. Nie ma powodu, żeby to nie działało tylko dlatego, że używasz ServiceStack.

3
using ServiceStack.Logging; 
using ServiceStack.Logging.Elmah; 
using ServiceStack.Logging.NLogger; 

public AppHost() 
     : base(
      "description", 
      typeof(MyService).Assembly) 
    { 
     LogManager.LogFactory = new ElmahLogFactory(new NLogFactory()); 
    } 

    public override void Configure(Container container) 
    { 
     this.ServiceExceptionHandler += (request, exception) => 
      { 
       // log your exceptions here 
       HttpContext context = HttpContext.Current; 
       ErrorLog.GetDefault(context).Log(new Error(exception, context)); 

       // call default exception handler or prepare your own custom response 
       return DtoUtils.HandleException(this, request, exception); 
      }; 

     // rest of your config 
    } 
} 

Teraz twój błąd ServiceStack pojawiają się w Elmah (przy założeniu, że masz skonfigurowany web.config itp).

+0

Wystarczy być jasne, odpowiedź powyżej wykorzystuje pojedynczy punkt wejścia do wyjątków ... https: // github .com/ServiceStack/ServiceStack/wiki/Obsługa błędów – Darren

2

Właściwie odpowiedź kampsj jest lepsza niż Gavina, ponieważ Gavins powoduje podwójne logowanie do elmah, wywołując jawny rejestrator elmah, a następnie domyślną obsługę błędów servicestack ... która sama już dokonuje rejestrowania.

Tak naprawdę wszystko, co potrzebne jest to (poniżej zakładając chcesz owinąć nlog z ELMAH)

public class YourAppHost : AppHostBase 
{ 
    public YourAppHost() //Tell ServiceStack the name and where to find your web services 
     : base("YourAppName", typeof(YourService).Assembly) 
    { 
     LogManager.LogFactory = new ElmahLogFactory(new NLogFactory()); 
    } 

    //...just normal stuff... 
} 

Można tylko mieć ten powyżej:

ElmahLogFactory factory = new ElmahLogFactory(); 

... ale prawdopodobnie powinien zawinąć inny typ rejestratora dla rejestrowania błędów, takich jak Debugowanie i Ostrzeganie.

0

Ta sekcja na temat configuring Elmah i Logging.Elmah UseCase dla działającego przykładu skonfigurowanych razem usług ServiceStack i Elmah.

ElmahLogFactory można skonfigurować w swojej Global.asax przed inicjowania ServiceStack AppHost, np:

public class Global : System.Web.HttpApplication 
{ 
    protected void Application_Start(object sender, EventArgs e) 
    { 
     var debugMessagesLog = new ConsoleLogFactory(); 
     LogManager.LogFactory = new ElmahLogFactory(debugMessagesLog, this); 
     new AppHost().Init(); 
    } 
}