.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日

相关文章

  • 如何利用js给自己照相并修图

    如何利用js给自己照相并修图 在Web开发中,我们可以使用JavaScript来实现照相和修图的功能。本文将提供一个完整攻略,包括如何使用JavaScript来照相和修图,并提供两个示例说明。 步骤1:使用WebRTC API照相 WebRTC API是一个浏览器原生的API,可以访问摄像头和麦克风。以下是使用WebRTC API照相的步骤: 在HTML文件…

    云计算 2023年5月16日
    00
  • 关于.net环境下跨进程、高频率读写数据的问题

    下面是关于“.NET环境下跨进程、高频率读写数据的问题”的完整攻略,包含两个示例说明。 简介 在.NET环境下,跨进程、高频率读写数据是一个常见的问题。在本攻略中,我们将介绍如何在.NET环境下解决这个问题,以确保数据的正确性和可靠性。 步骤 在.NET环境下,我们可以通过以下步骤来解决跨进程、高频率读写数据的问题: 使用共享内存来存储数据。 使用互斥锁来保…

    云计算 2023年5月16日
    00
  • 国内网站常用的一些 CDN 公共库加速服务小结

    国内网站常用的一些 CDN 公共库加速服务小结 CDN(Content Delivery Network)是一种分布式的网络架构,可以将网站的静态资源(如图片、CSS、JavaScript等)缓存到全球各地的服务器上,从而提高网站的访问速度和稳定性。本文将介绍国内常用的一些CDN公共库加速服务,包括使用方法和示例说明。 1. BootCDN BootCDN是…

    云计算 2023年5月16日
    00
  • Python面向对象class类属性及子类用法分析

    Python面向对象class类属性及子类用法分析 在Python中,面向对象编程是一种强大的编程方法,其中class类是面向对象编程的基本单位。 本文将讲解Python中的class类属性及其子类用法,以及提供两个示例说明。 Class类属性 class类能够定义变量,也就是属性。这些属性通常是定义在class的方法之外的,因此是公用的,即被所有的实例对象…

    云计算 2023年5月18日
    00
  • 浅谈ChatGPT 对当下互联网生态意义

    浅谈ChatGPT 对当下互联网生态意义 ChatGPT是一种基于GPT模型的聊天机器人,它可以通过对话学习不同的语言和知识,从而提供更加智能化的服务。在当下互联网生态中,ChatGPT具有重要的意义。下面是一份关于ChatGPT对当下互联网生态意义的完整攻略,包括背景介绍、ChatGPT的意义、示例说明等。 1. 背景介绍 随着互联网的发展,人们对于智能化…

    云计算 2023年5月16日
    00
  • 国内常用的js类库大全(CDN公共库)

    国内常用的JS类库大全(CDN公共库)攻略 在前端开发中,使用JS类库可以大大提高开发效率和代码质量。国内有很多常用的JS类库,其中一些被托管在CDN公共库中,可以方便地引用和使用。下面是一份关于国内常用的JS类库大全(CDN公共库)的完整攻略,包括背景介绍、使用方法、示例说明等。 1. 背景介绍 CDN公共库是一种托管在云端的JS类库,可以方便地引用和使用…

    云计算 2023年5月16日
    00
  • 三个角度解构云计算,商业驱动or技术驱动?

    从云计算的使用者到云服务的输出者,大多互联网公司在过去一年完成了角色的转换,也让云计算的未来更加扑朔迷离。不过,抛却进入时间这个评判因素,单从技术和商业化的角度来解构云计算的话,对于云计算的格局以及未来可能的竞争局面,似乎并非那么模糊不清。 第一类玩家:商业驱动技术 之前在互联网圈流行着这样一个段子,如何打造一个牛逼的产品,在研发、产品、投入等都不给力的情况…

    云计算 2023年4月11日
    00
  • 以前端视角,漫谈「云端」

    当今世界,云计算技术在快速发展,不断为我们带来新的应用场景和解决方案。作为一名前端开发者,了解云技术并掌握如何在前端中应用它们是必不可少的。本篇文章将介绍云计算技术的基本概念,并从前端角度探讨如何使用云技术提高应用的可扩展性、安全性、性能和用户体验。 作者:京东零售 郑炳懿 前言: 当今世界,云计算技术在快速发展,不断为我们带来新的应用场景和解决方案。作为一…

    2023年4月10日
    00
合作推广
合作推广
分享本页
返回顶部