【问题标题】:Serilog creates the log file but doesn't write into itSerilog 创建日志文件但不写入其中
【发布时间】:2020-04-23 08:18:13
【问题描述】:

所以我开始在我的 ASP .NET Core 3.1 Web API 中使用 Serilog,如下所示:

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

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

但是,创建了日志文件但没有任何内容写入其中,无论我在哪里调用类似Log.Debug("Write this") 的东西。我尝试使用不同的路径来避免任何形式的写入凭证问题,但无济于事。此外,尽管也设置了控制台日志,但我在 Visual Studio 的输出窗口中看不到任何内容。这是我在 appSettings.json 中写的:

"Serilog": {
"MinimumLevel": {
  "Default": "Debug"
},
"WriteTo": [      
  {
    "Name": "Console"
  },
  {
    "Name": "File",
    "Args": {
      "path": "log.txt",
      "rollingInterval": "Day",
      "retainedFileCountLimit": 7,
      "buffered": true
    }
  }
]
  },

我错过了什么吗?

【问题讨论】:

    标签: asp.net-core-webapi serilog


    【解决方案1】:

    更新OP edited the question after my answer 并删除了我指出的代码部分。


    在上面的示例中,您在应用程序的一开始就写入 Serilog,甚至在配置 Serilog 之前,因此您的消息只是被丢弃...

    为了做你想做的事,你需要先设置 Serilog。

    关注 Serilog.AspNetCore 存储库中的EarlyInitializationSample,看看它是如何完成的,看起来像这样:

    using System;
    using System.IO;
    using Microsoft.AspNetCore.Hosting;
    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.Hosting;
    using Serilog;
    
    namespace EarlyInitializationSample
    {
        public class Program
        {
            public static IConfiguration Configuration { get; } = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
                .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", optional: true)
                .AddEnvironmentVariables()
                .Build();
    
            public static int Main(string[] args)
            {
                Log.Logger = new LoggerConfiguration()
                    .ReadFrom.Configuration(Configuration)
                    .Enrich.FromLogContext()
                    .WriteTo.Debug()
                    .WriteTo.Console(
                        outputTemplate: "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj} {Properties:j}{NewLine}{Exception}")
                    .CreateLogger();
    
                try
                {
                    Log.Information("Getting the motors running...");
    
                    CreateHostBuilder(args).Build().Run();
    
                    return 0;
                }
                catch (Exception ex)
                {
                    Log.Fatal(ex, "Host terminated unexpectedly");
                    return 1;
                }
                finally
                {
                    Log.CloseAndFlush();
                }
            }
    
            public static IHostBuilder CreateHostBuilder(string[] args) =>
                Host.CreateDefaultBuilder(args)
                    .ConfigureWebHostDefaults(webBuilder =>
                    {
                        webBuilder.UseStartup<Startup>();
                    })
                    .UseSerilog();
        }
    }
    

    Debugging and Diagnostics

    当 Serilog 未按预期运行时,这可能是由内部异常或配置问题引起的。 Here are a couple of ways to sort things out.

    【讨论】:

    • 抱歉,这只是我在代码中放置 Serilog 的众多内容之一。无论在哪里,它都不会记录任何内容。您的答案是您编写的原始代码还是来自文档?
    • @StackLloyd 上面的代码来自答案中链接的 EarlyInitializationSample
    • @StackLloyd 您可能希望 enable SelfLog and check for any exceptions 发生在 Serilog 中。
    • 为什么“消息被丢弃”?你所说的“在你的应用程序的一开始就写信给 Serilog”是什么意思?你怎么知道 OP 在哪里写入 Serilog?在示例中,OP 只是集成了 Serilog,而不是使用它编写日志。
    • @Chebur 按照设计,写入 Serilog 记录器应该是一种安全操作,并且永远不会抛出异常。您可以在 Reliability 文档上阅读更多内容。这意味着如果在写入日志时发生错误,则消息将丢失,除非接收器具有稍后重试的机制(也称为持久接收器)。示例中 OP 使用的接收器耐用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-28
    • 2012-11-03
    • 2014-06-03
    • 1970-01-01
    • 1970-01-01
    • 2018-02-03
    • 1970-01-01
    相关资源
    最近更新 更多