ServiceStack - 如何禁用默认异常日志记录

2023-12-02

符合ServiceStack 文档,我们有一个全局服务异常处理程序。文档说这个处理程序应该记录异常然后调用DtoUtils.HandleException, 像这样:

private object LogServiceException(object request, Exception exception)
{
    var message = string.Format("Here we make a custom message...");
    _logger.Error(message, exception);
    return DtoUtils.HandleException(this, request, exception);
 }

这会导致错误被记录两次,因为DTOUtils.HandleException也记录它,采用较少定制的格式。是的,与 DTOUtils 日志记录相比,我更喜欢它,并且不想只使用它。

我们如何关闭DTOUtils记录日志同时保留其余功能?没有人喜欢收到应有数量两倍的错误电子邮件。


我希望下面的代码可以解决您的问题。

根据文档新 API、自定义 Hook、ServiceRunner

and 使用新 API 的 ServiceRunner 进行细粒度错误处理

在AppHost.Configure中

   LogManager.LogFactory = new ServiceStack.Logging.Support.Logging.ConsoleLogFactory();   

然后在AppHost类中

         public override IServiceRunner<TRequest> CreateServiceRunner<TRequest>(ActionContext      actionContext)
          {
               return new MyServiceRunner<TRequest>(this, actionContext);
            }  

在 ServiceRunner 类中

       public class MyServiceRunner<T> : ServiceRunner<T>
       {

            public override object HandleException(IRequestContext requestContext, T request, Exception ex)
              {
                  if ( isYourCondition ) 
                  {
                        ResponseStatus rs = new ResponseStatus("error1", "your_message");
                        // optionally you can add custom response errors
                             rs.Errors = new List<ResponseError>();
                             rs.Errors.Add(new ResponseError());
                             rs.Errors[0].ErrorCode = "more details 2";

                            // create an ErrorResponse with the ResponseStatus as parameter
                            var errorResponse = DtoUtils.CreateErrorResponse(request, ex, rs);
                             // log the error
                             Log.Error("your_message", ex);
                             return errorResponse;

                   }
                   else
                        return base.HandleException(requestContext, request, ex);
               }

            }

如果返回base.HandleException,它会在内部调用DtoUtils.HandleException。 您将在控制台中看到只有一个日志错误。

在客户端中,如果您处理自定义错误的 WebServiceException。

            catch (WebServiceException err)
            {
                if ( err.ResponseStatus.Errors != null)
               { // do something with err.ResponseStatus.Errors[0].ErrorCode; 
               }
            }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ServiceStack - 如何禁用默认异常日志记录 的相关文章

随机推荐