.Net6 Web Core API --- AOP -- log4net 封装 -- MySQL -- txt

目录

一、引入 NuGet 包

二、配置log4net.config  

三、编写Log4net封装类

四、编写日志记录类

五、AOP -- 拦截器 -- 封装

六、案例编写

七、结果展示


一、引入 NuGet 包

log4net 

Microsoft.Extensions.Logging.Log4Net.AspNetCore   

MySql.Data         ----  MySQL数据库需要

Newtonsoft.Json

Autofac

Autofac.Extensions.DependencyInjection

Autofac.Extras.DynamicProxy

二、配置log4net.config  

    注:当前网上有两种 log4net.config 配置文件, 一种是以为根目录, 另一种以 为根目录




    
    
    
        
        
        

        
        
        
        
        
        

        
            
            
            
                
            
        

        
            
            
            
            
                
            
        

        
            
            
            
            
                
            
        

        
            
            
            
            
                
            
        

        
            
            
            
            
                
            
        

    

    
    
    
    
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
            
            
        
    

    
    
    
    
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
            
            
            

            
            
            
        
        
            
            
        
    

    
    
    
    
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
            
            
        
        
            
            
        
    

    
        
        
        
        
        
        
    



三、编写Log4net封装类

public static class CustomLog4netExt
{
    public static void AddLog4netExt(this WebApplicationBuilder builder)
    {
        // 添加 Log4net 配置文件
        builder.Logging.AddLog4Net("log4net.config");
        
        // log错误日志配置
        builder.Services.AddControllers(options =>
        {
            options.SuppressAsyncSuffixInActionNames = false;
            
            options.Filters.Add(typeof(GlobalExceptionsFilter));
        });
    }
}

四、编写日志记录类

全局报错监测类

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;

namespace Log4Test.Log4;

/// 
/// 全局异常错误日志
/// 
public class GlobalExceptionsFilter : IExceptionFilter
{
    private readonly IWebHostEnvironment _env;
    private readonly ILogger _logger;

    public GlobalExceptionsFilter(IWebHostEnvironment env, ILogger logger)
    {
        _env = env;
        _logger = logger;
    }
    public void OnException(ExceptionContext context)
    {
        var json = new JsonErrorResponse();
        json.Message = context.Exception.Message;//错误信息
        if (_env.IsDevelopment())
        {
            json.DevelopmentMessage = context.Exception.StackTrace;//堆栈信息
        }
        context.Result = new InternalServerErrorObjectResult(json);

        //采用log4net 进行错误日志记录
        _logger.LogError(WriteLog(json.Message, context.Exception));
    }

    /// 
    /// 自定义返回格式
    /// 
    /// 
    /// 
    /// 
    public string WriteLog(string throwMsg, Exception ex)
    {
        return string.Format("【自定义错误】:{0} \r\n" +
                             "【异常类型】:{1} \r\n" +
                             "【异常信息】:{2} \r\n" +
                             "【堆栈调用】:{3}", 
                             new object[] { 
                                 throwMsg,
                                 ex.GetType().Name, 
                                 ex.Message, 
                                 ex.StackTrace 
                             });
    }

}

public class InternalServerErrorObjectResult : ObjectResult
{
    public InternalServerErrorObjectResult(object value) : base(value)
    {
        StatusCode = StatusCodes.Status500InternalServerError;
    }
}
//返回错误信息
public class JsonErrorResponse
{
    /// 
    /// 生产环境的消息
    /// 
    public string Message { get; set; }
    /// 
    /// 开发环境的消息
    /// 
    public string DevelopmentMessage { get; set; }
}

日常方法监测类

using Castle.DynamicProxy;
using Newtonsoft.Json;

namespace LOG.Test;

/// 
/// 自定义 方法拦截器
/// 
public class CustomInterceptor : IInterceptor
{
    private readonly ILogger _logger;

    public CustomInterceptor(ILogger logger)
    {
        _logger = logger;
    }

    public void Intercept(IInvocation invocation)
    {
        string result = $"开始执行-->\n方法名: {invocation.Method.Name}\n";
        
        foreach (var item in invocation.Arguments)
        {
            result += $"入参---{JsonConvert.SerializeObject(item)}\n";
        }
        
        _logger.LogInformation(result);
        
        invocation.Proceed();
        
        _logger.LogInformation($"结束执行-->\n方法名: {invocation.Method.Name}\n" +
                                      $"返回结果---{JsonConvert.SerializeObject(invocation.ReturnValue)}\n");
    }
}

五、AOP -- 拦截器 -- 封装

using Autofac;
using Autofac.Extensions.DependencyInjection;
using Autofac.Extras.DynamicProxy;

namespace LOG.Test;

public static class CustomAOPExt
{
    public static void AddAOPExt(this WebApplicationBuilder builder)
    {
        
        builder.Host
            .UseServiceProviderFactory(new AutofacServiceProviderFactory())  // 工厂替换,把Autofac整合进来
            .ConfigureContainer(containerBuilder =>
            {
                // 依赖注入
                containerBuilder.RegisterType(); 
                containerBuilder.RegisterType().As().EnableClassInterceptors(); // 开启类拦截器 
                //containerBuilder.RegisterType().As().EnableInterfaceInterceptors(); // 开启接口拦截器
            });
    }
}

六、案例编写

// 在Program.cs 中

// 添加 lg4net 扩展
builder.AddLog4netExt();
// 添加 AOP 扩展
builder.AddAOPExt();

创建 Student 和 IStudent  测试类和接口

.Net6 Web Core API --- AOP -- log4net 封装 -- MySQL -- txt_第1张图片

 创建 一个 控制器

.Net6 Web Core API --- AOP -- log4net 封装 -- MySQL -- txt_第2张图片

七、结果展示

.Net6 Web Core API --- AOP -- log4net 封装 -- MySQL -- txt_第3张图片

 .Net6 Web Core API --- AOP -- log4net 封装 -- MySQL -- txt_第4张图片


如有错误,烦请批评指正

你可能感兴趣的:(Web,Core,API,.net,AOP,c#,mysql)