Asp.net 我在哪里可以在代码上设置日志机制
我正在使用asp.NETMVC应用程序,我对横切关注点很陌生。所以我需要知道在哪里可以使用下面的示例中的记录器代码 我有一个记录错误的界面。我正在我的代码上实现这个接口Asp.net 我在哪里可以在代码上设置日志机制,asp.net,logging,design-patterns,asp.net-web-api,Asp.net,Logging,Design Patterns,Asp.net Web Api,我正在使用asp.NETMVC应用程序,我对横切关注点很陌生。所以我需要知道在哪里可以使用下面的示例中的记录器代码 我有一个记录错误的界面。我正在我的代码上实现这个接口 public interface ILogger { void Log(Exception exception); } 所以我有Controller、ProductService和ProductRepository类 public interface ProductController: ApiController{
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?
}
}
}
公共类产品服务{
公共IEnumerable GetProducts(){
试一试{
productRepository.GetAll();
}捕获(例外e){
logger.Log(e);//2-我应该在这里使用登录吗?
}
}
}
在存储库中
public class ProductRepository{
public IEnumerable<Product> GetAll(){
try {
}catch(Exception e){
logger.Log(e); // 3-Should I use logging in here?
}
}
}
公共类产品存储库{
公共IEnumerable GetAll(){
试一试{
}捕获(例外e){
logger.Log(e);//3-我应该在这里使用登录吗?
}
}
}
我无法确定在哪里可以使用日志代码。或者在任何地方添加登录。您可以实现自定义异常过滤器
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));
对于从控制器方法引发的任何未经处理的异常,都将调用此筛选器。您应该使用MVC 3层体系结构。您必须从控制器调用服务,该服务将引用应负责日志记录的存储库。因此,如果在服务或存储库实现中发生异常,我将捕获ExceptionFilter。但我将向用户返回一条关于异常的用户友好消息。