gpt4 book ai didi

asp.net-core - ASP.Net Core API 自托管日志记录到文件

转载 作者:行者123 更新时间:2023-12-05 09:32:42 27 4
gpt4 key购买 nike

使用 ASP.Net Core 5.0 推出作为自己的 Windows 服务运行的 Web API 服务。我正在尝试弄清楚如何使用 Microsoft.Extensions.Logging 将日志写入文件。

我希望能够在应用程序推出的 appsettings.json 文件中指定日志文件的位置。我觉得我错过了什么。

我是否必须使用带有 Microsoft.Extensions.Logging 的另一个库(如 Serilog)才能完成此操作?我已经阅读了下面的链接,但没有看到任何关于文件日志记录的信息。

https://learn.microsoft.com/en-us/aspnet/core/fundamentals/logging/?view=aspnetcore-5.0

我有使用 log4Net 的背景,但无法全神贯注地思考如何让 Microsofot.Extensions.Logging 工作。

我尝试了 Serilog,但我遇到了一个问题,当我调试时,该项目似乎总是在 IIS Express 下运行,即使我将配置文件设置为项目名称,并将“启动”设置为“项目”。

我在这里错过了什么?

最佳答案

From the Microsoft documentation :

ASP.NET Core doesn't include a logging provider for writing logs to files. To write logs to files from an ASP.NET Core app, consider using a third-party logging provider.

使用 Serilog 对我来说非常好。

程序.cs:

using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Serilog;
using Serilog.Events;

namespace WebApplication
{
public class Program
{
public static void Main(string[] args)
{
var config = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", optional: false)
.Build();

var path = config.GetValue<string>("Logging:FilePath");

Log.Logger = new LoggerConfiguration()
.MinimumLevel.Override("Microsoft", LogEventLevel.Information)
.Enrich.FromLogContext()
.WriteTo.File(path)
.CreateLogger();

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

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

应用设置.json:

{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
},
"FilePath" : "logs/AppLog.txt"
},
"AllowedHosts": "*"
}

Controller (或服务,无论您需要什么):

using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;

namespace WebApplication
{
[ApiController]
public class MyController : ControllerBase
{
private readonly ILogger<MyController> _logger;

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


[HttpGet("/test")]
public ActionResult<string> Test()
{
_logger.LogInformation("Hello World.");

return "Success";
}
}
}

我安装的包:

<ItemGroup>
<PackageReference Include="Serilog" Version="2.10.0" />
<PackageReference Include="Serilog.AspNetCore" Version="4.1.0" />
<PackageReference Include="Serilog.Sinks.File" Version="4.1.0" />
</ItemGroup>

至于在 IISExpress 上运行,这取决于您拥有的 launchSettings.json,不确定您的问题在那里。通常,您在配置文件中为 Kestrel 使用 "commandName": "Project",为 IISExpress 使用 "commandName": "IISExpress"。然后您的 IDE 让您选择您想要的运行配置。

关于asp.net-core - ASP.Net Core API 自托管日志记录到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67793589/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com