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

相关文章

  • 北京超级云计算中心启动会现场直击

    文章讲的是北京超级云计算中心启动会现场直击,11月1日,中国科学院北京怀柔科教产业园区北京超级云计算中心启动会在北京雁栖经济开发区隆重举行。 ▲北京超级云计算中心奠基仪式   北京市怀柔区区长齐静、中科院基建局局长孔繁文、中科院办公厅副主任廖方宇、中科院北京分院副院长李静、北京市科委副主任朱世龙、北京市经信委副主任姜贵平、北京市怀柔区副区长张勇、北京雁栖经济…

    云计算 2023年4月13日
    00
  • Python机器学习应用之决策树分类实例详解

    Python机器学习应用之决策树分类实例详解 什么是决策树? 决策树是一种流行的机器学习算法,用于分类和回归分析。它可以通过对给定数据集进行学习并输出一组规则来进行预测。决策树算法常用于数据挖掘和统计学习中。 决策树有三个主要部分:决策节点,叶节点和分支。决策节点代表在数据集中某个属性上做出的决策,叶节点表示结果,分支是决策流程的路径。 如何构建决策树? 决…

    云计算 2023年5月18日
    00
  • 云计算平台(数据篇)-MySql高可用平台搭建Master-Slave

    公司MYSQL集群安装环境为Red hat 5或Client OS6.8 MSQL集群软件版本为7.2.8(http://www.mysql.com/downloads/cluster/) MYSQL集群安装 a)         节点配置 1.Wget MYSQL软件包至 /software下 2.对MYSQL软件包进行解压 Tar –zxvf mysql…

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

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

    云计算 2023年5月18日
    00
  • python3利用Socket实现通信的方法示例

    下面我来为你详细讲解“python3利用Socket实现通信的方法示例”的完整攻略。 什么是Socket? Socket,又称套接字,是计算机网络中两个程序间的通信机制。它定义了连接的概念,即通信的两个端点之间的一种通用的数据传输方式。 Socket有两种类型,分别为TCP和UDP。TCP(Transmission Control Protocol)是一种面…

    云计算 2023年5月18日
    00
  • 云计算从园区开始!智慧园区的三阶段

    文章讲的是云计算从园区开始!智慧园区的三阶段,12月12日,北京市经济和信息化委员会指导,北京经济技术开发区和云基地共同主办的“云世界2011”大会在北京隆重举行。 ▲点击查看IT168图文直播专题   在下午的分论坛三上,来自上海浦东软件园汇智科技的专家介绍了“云计算在园区中的应用”。 ▲   云计算从科技园区开始,2011年,经国务院批准的国家级高新技术…

    云计算 2023年4月13日
    00
  • openstack私有云布署实践【10.2 计算nova – controller节点配置(办公网环境)】

    一、首先登录controller1创建nova数据库,并赋于远程和本地访问的权限。     mysql -u root -p   CREATE DATABASE nova; GRANT ALL PRIVILEGES ON nova.* TO ‘nova’@’localhost’  IDENTIFIED BY ‘venic8888’; GRANT ALL PR…

    云计算 2023年4月10日
    00
  • 对近2年来“互联网思维”、“物联网”、“云计算”、“大数据”,“小白用户”等时髦词汇的些思考

      平时喜欢关注科技新闻,所以会在经常科技栏目里看到关于什么“互联网思维”,“物联网”,“小白用户”,”云计算“等等这些热词的文章。但是个人觉得很多文章是过度解读,在给读者相应的一些正面信息的同时,感觉更多的是给很多读者造成了一些负面影响。下面谈谈我自己的一些感受。   互联网思维   过度解读的典型,弄得过渡的神秘。自从近些年互联网通过自身强大的力量对传统…

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