如何在 .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文件。
市场上有几个库可以将其存档,但我在我的网站 [=30] 中使用 Serilog.AspNetCore 和 Serilog.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;
}
}
如何在 .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文件。
市场上有几个库可以将其存档,但我在我的网站 [=30] 中使用 Serilog.AspNetCore 和 Serilog.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;
}
}