如何在 .Net Core 3 ASP.NET MVC 中不使用第三方记录器记录到文件?

How to log to a file without using third party logger in .Net Core 3 ASP.NET MVC?

如何在 .NET CORE 3 ASP.NET MVC 中不使用第三方记录器(serilog、elmah 等)记录到文件?我没有在 https://docs.microsoft.com/ru-ru/aspnet/core/fundamentals/.

上找到此信息

If ASP.NET Core 3 MVC doesn't have such built-in functionality the code of using third-party logging providers will be acceptable for me.

MS 官方推荐使用第 3 方文件记录器。

在asp.net core 3.0中使用Serilog也很方便:

1.program.cs

public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .UseSerilog((ctx, config) => { config.ReadFrom.Configuration(ctx.Configuration); })
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });

2.appsettings.json

"Serilog": {
"Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File" ],

"WriteTo": [
  { "Name": "Console" },
  { "Name": "Debug" },
  {
    "Name": "File",
    "Args": {
      "path": "log-{Date}.txt",
      "rollingInterval": "Day",
      "shared": true
    }
  }
],
"Properties": {
  "Application": "SampleApp"
}
}

3.Use 以下 NuGet 包

<ItemGroup>    
    <PackageReference Include="Serilog.AspNetCore" Version="3.0.0" />
    <PackageReference Include="Serilog.Settings.Configuration" Version="3.1.1-dev-00209" />
    <PackageReference Include="Serilog.Sinks.File" Version="4.1.0" />  
</ItemGroup>

4。在控制器中:

public class HomeController : Controller
{
    private readonly ILogger<HomeController> _logger;

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

    public async Task Index()
    {
        _logger.LogInformation("Hello, World!");
    }
}

然后您可以查看您的项目中存在的txt文件。

参考https://github.com/serilog/serilog-sinks-file

市场上有几个库可以将其存档,但我在我的网站 [=30] 中使用 Serilog.AspNetCoreSerilog.Sinks.RollingFile 包=] 使用.Net Core 3.0 的项目。

首先你必须配置程序 class如下。

public static void Main(string[] args)
        {
            Log.Logger = new LoggerConfiguration()
                                .WriteTo.RollingFile("Log_{Date}.txt")
                                .MinimumLevel.Debug()
                                .MinimumLevel.Override("Microsoft.AspNetCore", LogEventLevel.Warning)
                                .Enrich.FromLogContext()
                                .CreateLogger();

            CreateHostBuilder(args).Build().Run();

            Log.CloseAndFlush();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                }).UseSerilog();
    }

如果您也需要记录 HTTP 请求。您必须通过在 Startup.cs.

中添加以下代码行来配置应用服务
app.UseSerilogRequestLogging();

然后您可以记录错误、信息或致命错误,如下所示。

using Microsoft.Extensions.Logging;

    [Route("api/[controller]")]
        [ApiController]
        public class TestController : ControllerBase
        {
            private readonly ILogger _logger;

            public TestController(ILogger<TestController> logger)
            {
                _logger = logger;
            }
            // GET api/values
            [HttpGet("{id}")]
            public ActionResult<IEnumerable<string>> Get(int id)
            {
                _logger.LogInformation("Start : Getting item details for {ID}", id);

                List<string> list = new List<string>();
                list.Add("A");
                list.Add("B");

                _logger.LogInformation("Completed : Item details for {ID}", list);
                return list;
            }
        }