2013-04-14 25 views

Trả lời

4

Nếu bạn có một giải pháp khai thác gỗ hiện tại sau đó bạn có thể sử dụng các dự án ServiceStack.Logging.Elmah. Nó có sẵn thông qua NuGet.

Trường hợp ngoại lệ, lỗi và cuộc gọi gây tử vong sẽ được ghi vào Elmah ngoài trình ghi nhật ký dự định ban đầu. Đối với tất cả các loại nhật ký khác, chỉ sử dụng trình ghi nhật ký gốc.

Vì vậy, nếu bạn đang sử dụng Log4Net sau đó bạn chỉ có thể cấu hình như thế này ELMAH

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

Nếu bạn không muốn quấn trong hơn một bản ghi hiện tại sau đó bạn chỉ có thể nghiên cứu thêm ELMAH cho bất kỳ ASP. Trang web NET. Không có lý do nó sẽ không hoạt động chỉ vì bạn đang sử dụng 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 
    } 
} 

Bây giờ lỗi ServiceStack của bạn sẽ xuất hiện ở Elmah (giả sử bạn đã thiết lập web.config, v.v.).

+0

Chỉ cần được rõ ràng, câu trả lời ở trên là sử dụng một điểm vào duy nhất cho trường hợp ngoại lệ ... https: // github .com/ServiceStack/ServiceStack/wiki/Xử lý lỗi – Darren

2

Thực tế câu trả lời của kampsj tốt hơn Gavin vì Gavins gây ra việc đăng nhập đôi vào elmah bằng cách gọi trình ghi nhật ký elmah rõ ràng và sau đó xử lý lỗi servicestack mặc định ... mà chính nó đã ghi nhật ký.

Vì vậy, thực sự bạn chỉ cần có này (sau đây giả sử bạn muốn bọc NLog với 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... 
} 

Bạn chỉ có thể có điều này trên:

ElmahLogFactory factory = new ElmahLogFactory(); 

... nhưng bạn có lẽ nên bọc một loại logger khác để ghi nhật ký không lỗi, như Debug và Warn.

0

Phần này trên configuring ElmahLogging.Elmah UseCase cho ví dụ hoạt động của ServiceStack và Elmah được định cấu hình cùng nhau.

Các ElmahLogFactory có thể được cấu hình trong Global.asax của bạn trước khi khởi tạo ServiceStack AppHost, ví dụ:

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(); 
    } 
} 
Các vấn đề liên quan