我正在使用asp.net mvc应用程序,而且我是关于交叉剪辑的新手。所以我需要知道在哪里可以使用我的记录器代码。
我有一个记录错误的界面。我正在我的代码上实现这个接口。
public interface ILogger { void Log(Exception exception); }
所以我有Controller,ProductService,ProductRepository类。
public interface ProductController: ApiController{
public IHttpActionResult Get(){
try {
productService.GetProducts();
}catch(Exception e){
logger.Log(e); // 1-Should I use logging in here?
}
}
}
产品服务;
public class ProductService{
public IEnumerable<Product> GetProducts(){
try {
productRepository.GetAll();
}catch(Exception e){
logger.Log(e); // 2-Should I use logging in here?
}
}
}
在存储库中。
public class ProductRepository{
public IEnumerable<Product> GetAll(){
try {
}catch(Exception e){
logger.Log(e); // 3-Should I use logging in here?
}
}
}
我无法确定在哪里可以使用日志记录代码。或者在任何地方添加日志记录。
答案 0 :(得分:0)
您可以实现自定义例外过滤器。
public class LogExceptionAttribute : ExceptionFilterAttribute
{
public ILogger logger { get; set; }
public LogExceptionAttribute(ILogger logger)
{
this.logger = logger;
}
public override void OnException(HttpActionExecutedContext actionExecutedContext)
{
var exception = actionExecutedContext.Exception;
logger.Log(actionExecutedContext.Exception);
// You could also send client a message about exception.
actionExecutedContext.Response =
actionExecutedContext.Request.CreateResponse(HttpStatusCode.InternalServerError, exception.Message);
}
}
然后在全球范围内注册。
GlobalConfiguration.Configuration.Filters.Add(new LogExceptionAttribute(Logger));
对于从控制器方法抛出的任何未处理的异常,将调用此过滤器。