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

相关文章

  • asp.net 文件上传与刷新与asp.net页面与iframe之间的数据传输

    asp.net 文件上传与刷新与asp.net页面与iframe之间的数据传输 在asp.net中,文件上传和页面刷新是常见的需求。同时,与iframe之间的数据传输也是常见的需求。本文将详细讲解如何在asp.net中实现文件上传和页面刷新,并介绍如何在asp.net页面和iframe之间传输数据。 文件上传 在asp.net中,可以使用FileUpload…

    云计算 2023年5月16日
    00
  • 支付宝的芝麻信用分能做什么事呢?

    支付宝的芝麻信用分能做什么事呢? 芝麻信用分是支付宝推出的一项信用评估服务,通过对用户的信用行为进行评估,为用户提供信用分数和信用报告。芝麻信用分可以用于很多场景,下面是一份关于芝麻信用分能做什么事的完整攻略,包括背景介绍、使用场景、示例说明等。 1. 背景介绍 芝麻信用分是支付宝推出的一项信用评估服务,通过对用户的信用行为进行评估,为用户提供信用分数和信用…

    云计算 2023年5月16日
    00
  • 支撑StackOverflow运营的网站硬件配置分享

    Stack Overflow是全球最大的程序员问答社区,每天有数百万的程序员在这里交流技术。为了支撑Stack Overflow的运营,需要一定的硬件配置。以下是支撑Stack Overflow运营的网站硬件配置分享的详细攻略: 1. 硬件配置 1.1. 服务器 Stack Overflow使用多台服务器来支撑其运营。其中,主要的服务器配置如下: CPU:I…

    云计算 2023年5月16日
    00
  • ANKR币在哪买?ANKR币交易所大盘点

    以下是“ANKR币在哪买?ANKR币交易所大盘点”的完整攻略: 1. ANKR币在哪买? ANKR币是一种数字货币,可以在多个交易所进行交易。以下是一些常见的ANKR币交易所: Binance Huobi Gate.io KuCoin BitMax 用户可以在这些交易所中选择一个或多个进行ANKR币的购买和交易。 2. ANKR币交易所大盘点 2.1. Bi…

    云计算 2023年5月16日
    00
  • ASP.NET Core利用UrlFirewall对请求进行过滤的方法示例

    下面是“ASP.NET Core利用UrlFirewall对请求进行过滤的方法示例”的完整攻略。 1. 什么是UrlFirewall UrlFirewall是ASP.NET Core中的一个中间件,它可以根据一系列的规则,对请求的URL进行过滤,只允许合法的URL请求通过,而拦截并拒绝非法的URL请求。UrlFirewall的主要作用是提高应用程序的安全性。…

    云计算 2023年5月17日
    00
  • 云计算助力生命科学探索

    “人类DNA序列是人类的真谛,这个世界上发生的一切事情,都与这一序列息息相关。” ——诺贝尔生理学与医学奖获得者杜伯克     在基因这本“生命天书”里,藏着有关健康的秘密,人类通过基因探索生命科学的脚步从未停歇。然而,对生命科学的探究离不开对基因数据信息的存储、挖掘、管理。其数据信息的巨大规模、结构复杂、快速增长等特点,对信息系统的存储能力、计算能力、扩展…

    云计算 2023年4月12日
    00
  • 谈云计算,服务器运算的惊天骗局

    云,她代表着美好,诗意,纯洁,遥不可及的意境。直到她跟计算扯到一起,计算视乎被诗化,而云,却被数字化。 且说说云计算是什么,当然,我不会傻到给他贴上一个定义。众所周知,云计算不过就是服务器计算而已。服务器计算本来就不是什么新鲜货,但是变成云计算之后,视乎土鸡变凤凰,小丫成天鹅,看起来很朦胧,比想象的较华丽,变得更值钱起来。谷歌说,我爱云,微软说,我特爱云,I…

    云计算 2023年4月11日
    00
  • openstack私有云布署实践【11.1 计算nova – compute节点配置(科兴环境)】

    这里我只使用kxcompute1节点配置为示例,其它节点的配置基本是一样的,只是声明的管理IP不同而已   计算节点 # yum install openstack-nova-compute sysfsutils   修改配置文件 vi /etc/nova/nova.conf   [DEFAULT] vcpu_pin_set = 4-31 resume_gu…

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