【问题标题】:Logging with Serilog .NET Core not outputting使用 Serilog .NET Core 进行日志记录不输出
【发布时间】:2019-03-29 17:17:48
【问题描述】:

PS:我的问题在于我,而不是代码。代码很好。我需要将.WriteTo.Console() 更改为.WriteTo.Debug()(并获得正确的nuget 包)。

我正在尝试使用 .NET Core Web Api 中的 Serilog 从我的日志中输出信息。但是没有输出相关信息(即我要记录的信息)。

我已经安装了以下 Serilog nuget 包:

  • Serilog
  • Serilog.AspNetCore
  • Serilog.Sinks.Console
  • Serilog.Sinks.File
  • Serilog.Sinks.RollingFile

我曾考虑在 appSettings.json 中设置我的配置设置,但如果可能,我更愿意这样做。

这是我的Program.cs 文件。

public class Program
{
    public static void Main(string[] args)
    {

        // Create the logger
        Log.Logger = new LoggerConfiguration()
            .Enrich.FromLogContext()
            .MinimumLevel.Debug()
            .WriteTo.Console()
            .CreateLogger();

        Log.Information("ah there you are");
        Log.Debug("super");
        Log.Error("super1");
        Log.Warning("super2");

        try
        {
            Log.Information("Starting web host");

            // Program.Main logic
            Directory.SetCurrentDirectory(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));
            CreateWebHostBuilder(args).Build().Run();
        }
        catch (Exception ex)
        {
            Log.Fatal(ex, "Host terminated unexpectedly");
            Console.WriteLine(ex.Message);
        }
        finally
        {
            // Close and flush the log.
            Log.CloseAndFlush();
        }   
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .UseSerilog(); // set serilog as the loggin provider
}

我已经在我的Startup.cs 中设置了这个,以防万一。

public class Startup
{
    private readonly ILogger _logger;

    public Startup(IConfiguration configuration, ILogger<Startup> logger)
    {
        Configuration = configuration;

        _logger = logger;
    }
}

以下是我运行应用程序时得到的输出。这并不重要(我已经多次搜索以确认我没有遗漏任何东西。大多数情况下,我附上这张照片以确认我确实在正确的区域寻找)。

有什么想法吗?

【问题讨论】:

  • 您显示的图片用于调试日志,而不是控制台日志。您需要检查 cmd 控制台本身。
  • 你好@VidmantasBlazevicius,你是指我的项目的 dotnet run 吗?而不是在VS中使用调试播放按钮?如果是这样,我可以通过播放按钮查看它们吗?

标签: c# asp.net-core asp.net-core-webapi serilog


【解决方案1】:

您需要在programs.cs中配置您的记录器

    public static IWebHostBuilder CreateWebHostBuilder(string[] args)
    {
        return WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
                .UseSerilog((context, configuration) => configuration
                .Enrich.FromLogContext()
                .MinimumLevel.Debug()
                .WriteTo.Console(),
                preserveStaticLogger:true);
    }

您可以删除所有其他 Serilog 引用(在 startup.cs 中)和“Log.CloseAndFlush()”指令(它将自动关闭)

然后你可以在任何你想要的地方注入一个ILogger&lt;T&gt;接口。

顺便说一句:我不确定是否需要“preserveStaticLogger”。

【讨论】:

  • 添加 preserveStaticLogger:true 解决了我使用 Serilog 和 Oakton 的问题。
猜你喜欢
  • 1970-01-01
  • 2021-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多