首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Serilog创建日志文件,但不写入日志文件

Serilog创建日志文件,但不写入日志文件
EN

Stack Overflow用户
提问于 2020-04-22 09:08:10
回答 1查看 720关注 0票数 1

因此,我已经开始使用.NET Core3.1WebAPI,如下所示:

代码语言:javascript
复制
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的输出窗口中看不到任何内容。下面是我在我的appSettings.json中所写的内容:

代码语言:javascript
复制
"Serilog": {
"MinimumLevel": {
  "Default": "Debug"
},
"WriteTo": [      
  {
    "Name": "Console"
  },
  {
    "Name": "File",
    "Args": {
      "path": "log.txt",
      "rollingInterval": "Day",
      "retainedFileCountLimit": 7,
      "buffered": true
    }
  }
]
  },

我是不是遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-22 13:55:22

更新:下面是OP在我回答后编辑了这个问题。,删除了我所指出的代码的部分。

在上面的例子中,您是在应用程序一开始就写信给Serilog的,甚至在Serilog配置之前,所以您的消息就被丢弃了.

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

按照EarlyInitializationSample中的Serilog.AspNetCore回购来查看它是如何完成的,如下所示:

代码语言:javascript
复制
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();
    }
}

调试与诊断 当Serilog没有按照您的预期行事时,这可能是由内部异常或配置问题引起的。以下是几种解决问题的方法

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61361301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档