c# - Serilog : RollingFile is not working in asp. 网络核心与 'appsettings.json'

标签 c# asp.net-core logging serilog

我正在使用 asp.net core(website) 和 Serilog 进行日志记录。

安装的 Nuget 包是

Serilog
Serilog.AspNetCore
Serilog.Extensions.Logging
Serilog.Extensions.Logging.File
Serilog.Settings.Configuration
Serilog.Sinks.File
Serilog.Sinks.RollingFile
Microsoft.Extensions.Logging

Main.cs 文件中的设置是:

public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
             .ConfigureAppConfiguration((WebHostBuilderContext, configurationBuilder) =>
             {
                 configurationBuilder.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
                 configurationBuilder.AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", optional: true);
                 configurationBuilder.AddEnvironmentVariables();
             })
             .ConfigureLogging((hostingContext, loggingBuilder) =>
             {
                 loggingBuilder.ClearProviders();
                 loggingBuilder.AddSerilog();
             })
            .UseStartup<Startup>();  
}

什么是工作:

在 Startup.cs 文件中,如果我编写以下代码,则会创建日志文件。在这里,我在代码本身中指定配置。

  public void Configure(IApplicationBuilder app,
                                IHostingEnvironment env,
                                ILoggerFactory loggerFactory)
    {
     string logFilePath = Path.Combine(env.ContentRootPath, "Logs/ImportManager2-{Date}.txt");

    Log.Logger = new LoggerConfiguration()
       .MinimumLevel.Debug()
       .WriteTo.RollingFile(logFilePath)
       .CreateLogger();

     loggerFactory.AddSerilog();

     --
     --
    }

当我使用包含以下内容的 appsettings.json 文件时

{
  "Logging": {
    "LogLevel": {
      "Default": "Information"
    }
  },
  "AllowedHosts": "*",
  "ConnectionStrings": {
    "MyDatabaseLocal": "Server=_;Database=_;MultipleActiveResultSets=true;Connection Timeout=333;Integrated Security=SSPI",
    "OtherDatabaseLocal": "Server=_;Database=_;MultipleActiveResultSets=true;Connection Timeout=333;Integrated Security=SSPI"
  },
  "Serilog": {
    "MinimumLevel": "Debug",
    "Override": {
      "Microsoft": "Warning"
    },
    "Using": [
      "Serilog.Sinks.Console",
      "Serilog.Sinks.File"
    ],
    "WriteTo": [
      {
        "Name": "RollingFile",
        "Args": {
          "path": "Logs/MyProject.txt"
        }
      }
    ]
  }
}

并像这样更改了 startup.cs 文件

public void Configure(IApplicationBuilder app,
                            IHostingEnvironment env,
                            ILoggerFactory loggerFactory)
{

 Log.Logger = new LoggerConfiguration()
             .ReadFrom.Configuration(Configuration.GetSection("Serilog"))
             .CreateLogger();

 loggerFactory.AddSerilog();
 --
 --
}

在此之后没有创建文件。可能是什么问题呢。

最佳答案

以下调用并不完全符合您的预期:

.ReadFrom.Configuration(Configuration.GetSection("Serilog"))

使用此扩展方法时,Serilog 期望在您通过的配置中有一个名为Serilog 的部分。在您的示例中,您正在传递 Serilog 部分本身,但随后它正在寻找另一个 Serilog 部分在其中

更新调用以仅通过 Configuration,如下所示:

.ReadFrom.Configuration(Configuration)

Serilog 将找到您的 Serilog 部分并使用其中的设置。

关于c# - Serilog : RollingFile is not working in asp. 网络核心与 'appsettings.json',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56801667/

相关文章:

javascript - 没有在另一个页面上获取 c# webmethod json 字符串

c# - 类/模型级别验证(相对于属性级别)? (ASP.NET MVC 2.0)

c# - 适用于 .NET 的 Google Analytics API

asp.net - 如何在成员(member) asp.net 2008 中获取当前用户名

gnome - gnome vino-server 的日志在哪里?

linux - mail.log 未显示所有已发送的电子邮件

c# - Solr MoreLikeThis/mlt 处理程序返回 404 错误

c# - ASP.NET Core Web API Facebook JWT 身份验证

asp.net-core - 如何在 IIS 上使用 ASP.NET Core 3.1 API 部署 Angular SPA?

c# - 实体类的依赖注入(inject)