Serilog 不记录到文件,只记录到控制台

问题描述

我目前正在做一个单声道项目,想在那里使用 Microsoft.Logging + Serilog,但我偶然发现了以下问题: 当我手动配置 Serilog 时,它会同时登录控制台和文件(如果我已经配置了这两个参数)。但是当我使用配置文件时,Serilog 总是忽略记录到文件中。

找到配置文件并从那里读取参数,因为如果我在那里添加“控制台”,Serilog会登录到控制台。

按照我的理解,通过这些设置,Serilog 应该登录到控制台和文件。我期待在 "folder with appsettings.json"/logs 中有此日志文件。但它只登录到控制台。当我删除 "Console" 时,它不会在任何地方记录。我不明白为什么会这样,所以我发布了一些基本的代码部分。如果我没有提供足够的信息,请在问题下方的评论中写信给我。

appsettings.json

{
    "Serilog": {
        "Using": [
            "Serilog.Sinks.Console"
        ],"MinimumLevel": "Debug","Enrich": [
            "FromLogContext","WithMachineName","WithProcessId","WithThreadId"
        ],"Writeto": [
            {
                "Name": "File","Args": {
                    "Path": "logs/GUIDemo.log","FileSizeLimitBytes": "400000","RollingInterval": "Day","RetainedFileCountLimit": "15","OutputTemplate": "[{Timestamp:yyyy-MM-dd HH:mm:ss.fff} {Level:u3}] {Message:lj} {NewLine}{Exception}","shared": true
                }
            },"Console"
        ]
    }
}

以下是我在一个类中配置 Serilog 的方法,在应用程序启动后不久执行哪些方法

    private IContainer container;
    private ILogger<Bootstrapper> logger;
    ...
    public void OnStartup()
    {
        this.Configuration = this.ConfigureConfiguration();
        var builder = new ContainerBuilder();
        builder.RegisterModule<AutofacModule>();
        this.container = builder.Build();
        this.AddLogger();
        this.logger = this.container.Resolve<ILogger<Bootstrapper>>();
        this.LogApplicationStart();
    }

最后是方法 AddLogger()LogApplicationStart()LogApplicationStart()

private void AddLogger()
{
    var loggerFactory = this.container.Resolve<ILoggerFactory>();
    loggerFactory.AddSerilog();

    Log.Logger = new LoggerConfiguration()
                .ReadFrom.Configuration(this.Configuration)
                .CreateLogger();
}

private IConfigurationRoot ConfigureConfiguration()
{
    return new ConfigurationBuilder().SetBasePath(System.IO.Directory.GetCurrentDirectory())
            .AddJsonFile("appsettings.json",false,true)
            .Build();
}

private void LogApplicationStart()
{
    this.logger.Log@R_542_4045@ion("App is started");
}

做完这一切,控制台的输出是(是的,是Godot):

单声道:日志文件是: 'C:\Users\Albert\AppData\Roaming/Godot/mono/mono_logs/2021_01_27 12.46.37(105008).txt'

[12:46:38 INF] 应用启动

Mono 日志文件与我的日志文件无关。我还尝试在 Log.CloseAndFlush() 的末尾添加 LogApplicationStart(),这是应用程序中目前唯一的方法,但它也没有帮助我。

当然,我知道这里有很多类似的问题,但我找不到解决我的问题的方法

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)