我是servicestack和elman logging的新手。
任何机构都可以建议我们如何将elmah集成到服务堆栈应用程序中。
谢谢...
答案 0 :(得分:4)
如果您有现有的日志记录解决方案,那么您可以使用ServiceStack.Logging.Elmah项目。它可以通过NuGet获得。
除了原定的记录器之外,还会将异常,错误和致命的呼叫记录到Elmah。对于所有其他日志类型,仅使用原始记录器。
因此,如果您已经在使用Log4Net,那么您可以像这样配置Elmah
ElmahLogFactory factory = new ElmahLogFactory(new Log4NetFactory());
如果您不想包装现有日志,那么您可以研究将Elmah添加到任何ASP.NET网站。没有理由因为您正在使用ServiceStack而无法工作。
答案 1 :(得分: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
}
}
现在你的ServiceStack错误出现在Elmah中(假设你已经设置了web.config等)。
答案 2 :(得分:2)
实际上kampsj的答案比Gavin更好,因为Gavins通过调用显式elmah logger然后默认的servicestack错误处理来导致双重记录到elmah ......它本身已经进行了日志记录。
所以你需要的就是这个(下面假设你想要用Elmah包裹NLog )
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...
}
你可以这样做:
ElmahLogFactory factory = new ElmahLogFactory();
...但是您可能应该为非错误日志记录包装另一种类型的记录器,例如Debug和Warn。
答案 3 :(得分:0)
本节介绍configuring Elmah和Logging.Elmah UseCase,了解ServiceStack和Elmah的工作示例。
在初始化ServiceStack AppHost之前,可以在ElmahLogFactory
中配置Global.asax
,例如:
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();
}
}