.Net Core3.0 WebApi 项目框架搭建之使用Serilog替换掉Log4j

让我来给您讲解一下如何使用Serilog替换掉Log4j。

1. 搭建.Net Core项目框架

首先,我们需要新建一个.Net Core WebApi项目,并安装对应的NuGet包——Serilog和Serilog.AspNetCore。

在Program.cs文件中启用Serilog,代码如下:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .UseSerilog((context, loggerConfiguration) =>
        {
            loggerConfiguration
                .Enrich.FromLogContext()
                .WriteTo.Console();
        })
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
        });

2. 替换掉Log4j

现在我们来看看如何使用Serilog替换掉Log4j。

首先,我们需要卸载掉Log4j的NuGet包,然后安装Serilog.Sinks.File包。

在appsettings.json文件中添加Serilog的配置,将日志文件保存到logs文件夹中:

"Serilog": {
    "Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File" ],
    "MinimumLevel": "Information",
    "WriteTo": [
        {
            "Name": "Console"
        },
        {
            "Name": "File",
            "Args": {
                "path": "logs/log-.txt",
                "rollingInterval": "Day",
                "retainedFileCountLimit": 30
            }
        }
    ],
    "Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ],
    "Properties": {
        "Application": "WebApi"
    }
}

接下来,在Startup.cs文件的Configure方法中加入Serilog的中间件:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
{
    loggerFactory.AddSerilog();
    ...
}

最后,我们需要将原先使用Log4j的代码全部替换掉。例如,将原先的代码:

private static readonly ILog Logger = LogManager.GetLogger(Log4NetHelper.GetConfigPath(), "LoggerName");

替换成:

private static readonly ILogger Logger = Log.ForContext<ClassName>();

这里的ClassName指的是当前类的名称。

示例说明

以下是两个示例说明:

示例1:使用Serilog记录请求日志

我们可以使用Serilog在每个请求的开始和结束时分别记录请求的详细信息。假设我们有一个中间件类:

public class RequestLoggingMiddleware
{
    private readonly RequestDelegate _next;
    private readonly ILogger _logger;

    public RequestLoggingMiddleware(RequestDelegate next, ILoggerFactory loggerFactory)
    {
        _next = next;
        _logger = loggerFactory.CreateLogger<RequestLoggingMiddleware>();
    }

    public async Task Invoke(HttpContext context)
    {
        _logger.LogInformation("Request started: {Method} {Url} from {Ip}", context.Request.Method, context.Request.Path, context.Connection.RemoteIpAddress);

        await _next.Invoke(context);

        _logger.LogInformation("Request finished: {Status}", context.Response.StatusCode);
    }
}

在Startup.cs文件中将中间件注册到管道中:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
{
    app.UseMiddleware<RequestLoggingMiddleware>();
    ...
}

现在每个请求的详细信息都会被记录下来。

示例2:使用Serilog记录异常日志

我们可以在应用程序抛出未处理的异常时使用Serilog记录异常的详细信息。假设我们有一个异常过滤器:

public class ApiExceptionFilterAttribute : ExceptionFilterAttribute
{
    private readonly ILogger _logger;

    public ApiExceptionFilterAttribute(ILoggerFactory loggerFactory)
    {
        _logger = loggerFactory.CreateLogger<ApiExceptionFilterAttribute>();
    }

    public override void OnException(ExceptionContext context)
    {
        _logger.LogError(context.Exception, "An unhandled exception has occurred: {Message}", context.Exception.Message);

        base.OnException(context);
    }
}

在Startup.cs文件中将过滤器注册到全局过滤器中:

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers(options => options.Filters.Add<ApiExceptionFilterAttribute>());
    ...
}

现在当应用程序抛出未处理的异常时,会在日志文件中记录异常的详细信息。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:.Net Core3.0 WebApi 项目框架搭建之使用Serilog替换掉Log4j - Python技术站

(0)
上一篇 2023年5月17日
下一篇 2023年5月17日

相关文章

  • 一小时搞定云计算(陈滢博士的讲座总结)

    information technology: information technology的目标都是给用户带来价值,这是最本质的东西。 what is cloud computing: 广泛的说,只要在远端(云端)完成的服务都可以认为是云计算。例如 两种角色:使用者(一种新的使用计算资源的方法)和提供者(一种新的服务交付方法) 云图解 (issa指裸机,可…

    云计算 2023年4月11日
    00
  • 撤回我也能看到!教你用Python制作微信防撤回脚本

    “撤回我也能看到!教你用Python制作微信防撤回脚本” 是一篇非常实用的文章,涉及到的内容包括微信机器人、图像处理、Python响应式编程等多个方面。下面将详细讲解该攻略的完整流程。 1. 准备工作 在开始制作微信防撤回脚本之前,需要进行一些准备工作。首先,需要注册一个微信测试号,以便在本地进行测试。具体的注册流程可以参考微信公众平台的官方文档。其次,需要…

    云计算 2023年5月18日
    00
  • ASP.NET Core项目使用xUnit进行单元测试

    ASP.NET Core项目使用xUnit进行单元测试 在ASP.NET Core项目中,我们可以使用xUnit进行单元测试。本文将提供一个完整的攻略,包括如何使用xUnit、如何编写单元测试、如何使用示例代码内容。 使用xUnit 在ASP.NET Core项目中,我们可以使用xUnit进行单元测试。以下是一个示例说明,演示如何使用xUnit: using…

    云计算 2023年5月16日
    00
  • centos7中firewall防火墙命令详解

    在 CentOS 7 中,firewall 是默认的防火墙软件。它可以帮助我们保护服务器免受网络攻击。本文将深入浅析 CentOS 7 中 firewall 防火墙命令的详细使用方法,包括启动、停止、重启、开放端口、关闭端口等操作。 启动、停止、重启 firewall 启动 firewall: systemctl start firewalld 停止 fir…

    云计算 2023年5月16日
    00
  • 云计算 读paper笔记

    paper title : Above the Clouds: A berkeley View of Cloud Computing   1、云计算对IT业带来的改变 ① making software even more attractive as a service ② shaping the way IT hardware is design and …

    2023年4月10日
    00
  • 华为云联合多家单位正式开源云原生多沙箱容器运行时Kuasar

    摘要:云原生多沙箱容器运行时Kuasar正式开源。 本文分享自华为云社区《重磅发布!华为云联合多家单位正式开源云原生多沙箱容器运行时Kuasar》,作者:云容器大未来。 当地时间4月21日上午,在荷兰阿姆斯特丹举办的KubeCon + CloudNativeCon Europe 2023云原生峰会上,CNCF董事、华为首席开源联络官任旭东宣布,云原生多沙箱容…

    云计算 2023年4月27日
    00
  • 将个人计算机中的文件备份到腾讯云对象存储

    作者介绍 田嵩,腾讯云Web前端专家工程师,现负责腾讯云对象存储生态与开发者工作 数据无价,相信很多人都深有体会。数码照片、电子文档、工作产出、游戏存档,哪一样都丢不起。 而实际工作和生活中,可能会遇到如下问题: 硬盘故障导致文件丢失 人为的误操作、计算机宕机或软件崩溃导致单一文件丢失 被要求“回滚版本”,却发现没有保存历史版本 这些令人头疼不已的问题,时刻…

    云计算 2023年4月13日
    00
  • 在X分钟内学会C#的入门简明教程

    「在X分钟内学会C#的入门简明教程」是一个快速学习C#编程语言的入门教程。以下是学习C#的入门简明教程完整攻略: 第一步:了解C#基础概念 在学习C#之前,需要了解一些基础概念,包括: 面向对象编程 类和对象 继承和多态 变量和数据类型 操作符和表达式 控制语句和循环语句 数组和集合 这些基础概念是C#编程的基础,深入学习它们对日后的编程能力有重要影响。可以…

    云计算 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部