是否可以使用ELMAH进行以下操作?
logger.Log(" something");
我是这样做的:
try
{
// Code that might throw an exception
}
catch(Exception ex)
{
// I need to log error here...
}
ELMAH不会自动记录此异常,因为它已被处理。
是否可以使用ELMAH进行以下操作?
logger.Log(" something");
我是这样做的:
try
{
// Code that might throw an exception
}
catch(Exception ex)
{
// I need to log error here...
}
ELMAH不会自动记录此异常,因为它已被处理。
当前回答
使用这条线,它工作得非常好。
try{
//Code which may throw an error
}
catch(Exception ex){
ErrorLog.GetDefault(HttpContext.Current).Log(new Elmah.Error(ex));
}
其他回答
我试图写自定义消息到elmah日志使用Signal.FromCurrentContext().Raise(ex);并发现这些例外都是冒泡的,例如:
try
{
...
}
catch (Exception ex)
{
Elmah.ErrorSignal.FromCurrentContext().Raise(ex);
// this will write to the log AND throw the exception
}
此外,我不知道elmah是如何支持不同级别的日志记录的——是否有可能通过web关闭详细日志记录。配置设置?
可以使用Elmah.ErrorSignal()方法记录问题而不引发异常。
try
{
// Some code
}
catch(Exception ex)
{
// Log error
Elmah.ErrorSignal.FromCurrentContext().Raise(ex);
// Continue
}
使用这条线,它工作得非常好。
try{
//Code which may throw an error
}
catch(Exception ex){
ErrorLog.GetDefault(HttpContext.Current).Log(new Elmah.Error(ex));
}
直接日志写入方法,自ELMAH 1.0开始工作:
try
{
some code
}
catch(Exception ex)
{
Elmah.ErrorLog.GetDefault(HttpContext.Current).Log(new Elmah.Error(ex));
}
ELMAH 1.2引入了更灵活的API:
try
{
some code
}
catch(Exception ex)
{
Elmah.ErrorSignal.FromCurrentContext().Raise(ex);
}
这两种解决方案之间存在差异:
Raise方法对异常应用ELMAH过滤规则。日志方法没有。 Raise是基于订阅的,能够将一个异常记录到多个记录器中。
是的,这是可能的。ELMAH被设计用来拦截未处理的异常。但是,您可以通过ErrorSignal类向ELMAH发出异常信号。这些异常不会被抛出(不会冒泡),而只被发送到ELMAH(以及ErrorSignal类的Raise事件的订阅者)。
举个小例子:
protected void ThrowExceptionAndSignalElmah()
{
ErrorSignal.FromCurrentContext().Raise(new NotSupportedException());
}