Serilog 不使用 .NET Core 2.2 写入文件

Ang*_*ker 7 c# serilog asp.net-core

PS 下面的代码工作正常。问题出在显示器和椅子之间。@jpgrassi 的回答让我朝着正确的方向解决了这个问题。

我在 program.cs 中有以下内容:

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

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseSerilog((ctx, config) => { config.ReadFrom.Configuration(ctx.Configuration); })
            .UseStartup<Startup>();

}
Run Code Online (Sandbox Code Playgroud)

在 appsettings.json 中:

{
  "Serilog": {

    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "Default": "Information",
        "Microsoft": "Information",
        "System": "Information"
      }
    },

    "WriteTo": [
      {
        "Name": "RollingFile",
        "Args": {
          "pathFormat": "log-{Date}.txt",
        }
      }
    ]
  },

  "AllowedHosts": "*"
}
Run Code Online (Sandbox Code Playgroud)

在控制器中,我写了一个日志_logger.LogWarning("foo");,但文件没有在任何地方写出,我看不到任何错误。

我从 Nuget 导入了以下包:Serilog、Serilog.AspNetCore、Serilog.Settings.Configuration、Serilog.Sinks.RollingFile。

我错过了什么?

jpg*_*ssi 5

我发布了原始答案,假设问题是UsingSerilog 配置中缺少该属性。我一直在我的项目中使用它,它是 OP 设置中唯一缺少的东西。但是,在发布答案后,我尝试了不同的配置替代方案,包括与问题中相同的配置方案,并且仍在生成日志。阅读更多,我发现该Using属性不是必需的。从serilog-settings-configuration包:

(这个包实现了一个约定,使用 DependencyContext 查找名称中任何位置带有 Serilog 的任何包并从中提取配置方法,因此上面的Using示例是多余的。)来源:https : //github.com/serilog/serilog-settings-配置

事实证明(请参阅问题评论)真正的问题是日志文件位置和写入权限。代码明智的一切都已经在工作。

作为历史问题,我将在这里保留原始答案,但它的内容实际上并没有解决任何问题,因为首先没有破坏任何东西。


原答案:

我相信问题是因为您没有在您appsettings的实际使用接收RollingFile器中指定。我刚刚快速创建了一个新应用程序,它可以工作:

  "Serilog": {
    "Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.RollingFile" ],
    "MinimumLevel": "Debug",
    "WriteTo": [
      { "Name": "Console" },
      {
        "Name": "RollingFile",
        "Args": { "pathFormat": "log-{Date}.txt" }
      }
    ],
    "Properties": {
      "Application": "Sample"
    }
  }
Run Code Online (Sandbox Code Playgroud)

使用以下 NuGet 包:

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.App" />
    <PackageReference Include="Serilog.AspNetCore" Version="2.1.1" />
    <PackageReference Include="Serilog.Settings.Configuration" Version="3.0.1" />
    <PackageReference Include="Serilog.Sinks.Console" Version="3.1.1" />
    <PackageReference Include="Serilog.Sinks.RollingFile" Version="3.3.0" />
  </ItemGroup>
Run Code Online (Sandbox Code Playgroud)

这会记录到应用程序根目录中的一个文件中log-20190304.txt