Abp源码分析之Serilog日志

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 本文介绍了如何在ASP.NET Core MVC项目和ABP框架中配置和使用Serilog日志库。通过修改`Program.cs`文件,配置日志级别、输出目标,并在控制器和页面模型中记录日志。具体步骤包括新建MVC项目、配置日志、修改控制器和首页代码。最终,日志将被记录到控制台和`Logs/logs.txt`文件中。

# aspnetcore mvc项目里的Serilog

新建mvc项目

修改Program.cs

using Serilog.Events;
using Serilog;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddControllersWithViews();

//配置日志
Log.Logger = new LoggerConfiguration()
#if DEBUG
    .MinimumLevel.Debug()
#else
    .MinimumLevel.Information()
#endif
    .Enrich.FromLogContext()
    .WriteTo.Async(c => c.File("Logs/logs.txt"))
    .WriteTo.Async(c => c.Console())
    .CreateLogger();

builder.Host.UseSerilog();

var app = builder.Build();

if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();

下面代码就是新增的日志配置

Log.Logger = new LoggerConfiguration()
#if DEBUG
    .MinimumLevel.Debug()
#else
    .MinimumLevel.Information()
#endif
    .Enrich.FromLogContext()
    .WriteTo.Async(c => c.File("Logs/logs.txt"))
    .WriteTo.Async(c => c.Console())
    .CreateLogger();

builder.Host.UseSerilog();

修改HomeController.cs

using Microsoft.AspNetCore.Mvc;
using System.Diagnostics;
using WebApplication2.Models;

namespace WebApplication2.Controllers
{
    public class HomeController : Controller
    {
        private readonly ILogger<HomeController> _logger;

        public HomeController(ILogger<HomeController> logger)
        {
            _logger = logger;
        }

        public IActionResult Index()
        {
            _logger.LogInformation("This is a test log message"); // 记录日志
            return View();
        }
    }
}

ABP中的日志

Program.cs

using System;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Serilog;
using Serilog.Events;

namespace Acme.BookStore.Web;

public class Program
{
   
    public async static Task<int> Main(string[] args)
    {
   
        //配置日志
        Log.Logger = new LoggerConfiguration()
#if DEBUG
            .MinimumLevel.Debug()
#else
            .MinimumLevel.Information()
#endif
            .MinimumLevel.Override("Microsoft", LogEventLevel.Information)
            .MinimumLevel.Override("Microsoft.EntityFrameworkCore", LogEventLevel.Warning)
            .Enrich.FromLogContext()
            .WriteTo.Async(c => c.File("Logs/logs.txt"))
            .WriteTo.Async(c => c.Console())
            .CreateLogger();

        try
        {
   
            Log.Information("Starting web host.");
            var builder = WebApplication.CreateBuilder(args);
            builder.Host
                .AddAppSettingsSecretsJson()
                .UseAutofac()
                .UseSerilog();
                //.UseSerilog((context, services, loggerConfiguration) =>
                //{
   
                //    //loggerConfiguration.WriteTo.File("Logs/log.txt");
                //    //loggerConfiguration.WriteTo.Console();
                //    //loggerConfiguration.WriteTo.Async(c => c.AbpStudio(services));
                //});
            await builder.AddApplicationAsync<BookStoreWebModule>();
            var app = builder.Build();
            await app.InitializeApplicationAsync();
            await app.RunAsync();
            return 0;
        }
        catch (Exception ex)
        {
   
            Log.Fatal(ex, "Host terminated unexpectedly!");
            return 1;
        }
        finally
        {
   
            Log.CloseAndFlush();
        }
    }
}
//日志的配置
        Log.Logger = new LoggerConfiguration()
#if DEBUG
            .MinimumLevel.Debug()
#else
            .MinimumLevel.Information()
#endif
            .MinimumLevel.Override("Microsoft", LogEventLevel.Information)
            .MinimumLevel.Override("Microsoft.EntityFrameworkCore", LogEventLevel.Warning)
            .Enrich.FromLogContext()
            .WriteTo.Async(c => c.File("Logs/logs.txt"))
            .WriteTo.Async(c => c.Console())
            .CreateLogger();
//下面必需有
.UseSerilog();

在模块的OnApplicationInitialization中加

app.UseAbpSerilogEnrichers();

修改首页Index.cshtml.cs

using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;

namespace Acme.BookStore.Web.Pages;

public class IndexModel : BookStorePageModel
{
    private readonly ILogger<IndexModel> _logger;
    public IndexModel(ILogger<IndexModel> logger)
    {
        _logger = logger;

        _logger.LogInformation("Logging from OnGet method");
    }

    public void OnGet()
    {
        _logger.LogInformation("Logging from OnGet method");
    }
}

然后就能在Logs/logs.txt查看日志了

作者

吴晓阳(手机:13736969112微信同号)

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
监控 容器
浅入ABP系列(3):增加日志组件、依赖注入服务
浅入ABP系列(3):增加日志组件、依赖注入服务
341 0
|
4月前
|
开发框架 NoSQL 前端开发
在Winform项目和Web API的.NetCore项目中使用Serilog 来记录日志信息
在Winform项目和Web API的.NetCore项目中使用Serilog 来记录日志信息
|
SQL 设计模式 Java
Mybatis源码分析二-如何优雅的使用主体日志
Mybatis源码分析二-如何优雅的使用主体日志
116 0
|
消息中间件 存储 自然语言处理
十八、.net core(.NET 6)搭建ElasticSearch(ES)系列之使用Logstash通过Rabbitmq接收Serilog日志到ES
使用Logstash通过Rabbitmq接收Serilog日志到ES首先,要部署logstash 为了与前面的ElasticSearch版本保持一致,此处Logstash下载的版本也是7.13.1, 下载地址:https://artifacts.elastic.co/downloads/logstash/logstash-7.13.1-windows-x86_64.zip
462 0
十八、.net core(.NET 6)搭建ElasticSearch(ES)系列之使用Logstash通过Rabbitmq接收Serilog日志到ES
|
数据可视化 搜索推荐 API
七、.net core(.NET 6)使用Serilog进行配置和实现日志记录
使用Serilog来实现日志记录先安装Serilog六件套神装包:
1911 0
七、.net core(.NET 6)使用Serilog进行配置和实现日志记录
|
监控 安全 Java
《SpringBoot启动流程三》:两万+字图文带你debug源码分析SpringApplication准备阶段(含配置文件加载时机、日志系统初始化时机)
《SpringBoot启动流程三》:两万+字图文带你debug源码分析SpringApplication准备阶段(含配置文件加载时机、日志系统初始化时机)
320 0
《SpringBoot启动流程三》:两万+字图文带你debug源码分析SpringApplication准备阶段(含配置文件加载时机、日志系统初始化时机)
|
Java API Maven
01、JUL日志(JDK自带日志框架,包含源码分析)(二)
01、JUL日志(JDK自带日志框架,包含源码分析)(二)
01、JUL日志(JDK自带日志框架,包含源码分析)(二)
|
Java 数据库
01、JUL日志(JDK自带日志框架,包含源码分析)(一)
01、JUL日志(JDK自带日志框架,包含源码分析)(一)
01、JUL日志(JDK自带日志框架,包含源码分析)(一)
『ABP』ABP vNext中使用开源日志面板 LogDashboard
📣读完这篇文章里你能收获到 - LogDashboard的实际项目接入
573 0
『ABP』ABP vNext中使用开源日志面板 LogDashboard
|
存储 消息中间件 RocketMQ
源码分析 RocketMQ DLedger(多副本) 之日志复制-下篇
源码分析 RocketMQ DLedger(多副本) 之日志复制-下篇
源码分析 RocketMQ DLedger(多副本) 之日志复制-下篇