目录
首先引用配置Serilog的NueGet包
Program.cs 添加如下代码
使用方法
测试应用
首先引用配置Serilog的NueGet包
Serilog
Serilog.AspNetCore
Serilog.Formatting.Compact
Serilog.Sinks.File
Serilog.Sinks.MySQL
Program.cs 添加如下代码
先封装一个类:
这里的将日志输出到数据库我给注释掉了,需要的伙伴可以解除注释哦
public static class InitScoped{/// /// 注入容器/// /// public static void Register(this IServiceCollection services) {services.AddScoped();}/// /// Serilog 日志拓展/// public static void ConfigureLogging(WebApplicationBuilder builder){string dateFile = DateTime.Now.ToString("yyyyMMdd");Log.Logger = new LoggerConfiguration().MinimumLevel.Override("Microsoft", LogEventLevel.Warning).Enrich.FromLogContext().WriteTo.Console(new CompactJsonFormatter())//.WriteTo.MySQL(connectionString: builder.Configuration.GetConnectionString("DbConnectionString"), tableName: "Logs") // 输出到数据库.WriteTo.Logger(configure => configure.Filter.ByIncludingOnly(e => e.Level == LogEventLevel.Debug).WriteTo.File($"logs/log-debug-{dateFile}.txt",rollingInterval: RollingInterval.Day,outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj}{NewLine}{Exception}")).WriteTo.Logger(configure => configure.Filter.ByIncludingOnly(e => e.Level == LogEventLevel.Information).WriteTo.File($"logs/log-info-{dateFile}.txt",rollingInterval: RollingInterval.Day,outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj}{NewLine}{Exception}")).WriteTo.Logger(configure => configure.Filter.ByIncludingOnly(e => e.Level == LogEventLevel.Error).WriteTo.File($"logs/log-error-{dateFile}.txt",rollingInterval: RollingInterval.Day,outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj}{NewLine}{Exception}")).WriteTo.File($"logs/log-total-{dateFile}.txt",rollingInterval: RollingInterval.Day,outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj}{NewLine}{Exception}",restrictedToMinimumLevel: LogEventLevel.Debug).CreateLogger();}}
Program.cs 调用此方法
#region 配置Serilog 日志InitScoped.ConfigureLogging(builder);builder.Host.UseSerilog(); //向主机注册Serilog#endregion
使用方法
直接在需要使用的控制器或方法类下进行注入即可,示例代码如下
public class DalTarget : BllTarget{private readonly ServerContext _context;private readonly ILogger _logger;public DalTarget(ServerContext context, ILogger logger){_context = context;_logger = logger;}public async Task<List> GetTarget(Guid guid){try{var data = await _context.Targets.Where(s => s.Id == guid).AsNoTracking().ToListAsync();if (data.Count <= 0){throw new Exception("接口:GetTarget|报错:查询列表id返回空数据");}return data;}catch (Exception ex){_logger.LogInformation($"GetTarget:{ex.Message},参数|id:{guid}");_logger.LogError($"GetTarget:{ex.Message},参数|id:{guid}");throw new Exception(ex.Message);}} }
这里 的LogInformation 和 LogError 看情况写 我把两个都写出来了
测试应用
报错后会在项目地址自动创建log文件夹
控制台输出
好啦,今天分享到这里哦