Serilog.Sinks.Graylog 在 Web API 应用程序中工作,但似乎不适用于控制台应用程序

问题描述 投票:0回答:1

我正在尝试将消息记录到 Graylog 实例。 我已经在 Asp.net core 应用程序中设置了代码来执行此操作,一切正常。 但是,我在尝试从控制台应用程序执行此操作时遇到问题。 Graylog 正在我的 Windows 计算机上的 Docker Desktop 中运行。 在我的 Graylog 实例中,我有一个 UDP 输入和一个 Http 输入处于活动状态。

对于ASP.Net Core应用程序,这是program.cs中的设置

        builder.Host.UseSerilog((context, configuration) =>
        {
            configuration
                  .ReadFrom.Configuration(context.Configuration)
                  .WriteTo.Graylog(new GraylogSinkOptions()
                  {
                      HostnameOrAddress = "localhost",
                      Port = 12201,
                      TransportType = TransportType.Http
                  });
        });

然后在我的program.cs 文件中再往下一点。

        app.UseSerilogRequestLogging();

当我启动 ASP.Net 应用程序时,我会在 Graylog 中收到日志消息。 这些是相关的包。

    <PackageReference Include="Serilog.AspNetCore" Version="8.0.1" />
    <PackageReference Include="Serilog.Sinks.Graylog" Version="3.1.1" />

翻到控制台应用程序,这就是设置。

            Log.Logger = new LoggerConfiguration()
                .MinimumLevel.Debug()
                .WriteTo.Console()
                .WriteTo.File("log.txt",
                  rollingInterval: RollingInterval.Day,
                   rollOnFileSizeLimit: true)
                .WriteTo.Graylog(new GraylogSinkOptions()
                {
                    HostnameOrAddress = "localhost",
                    Port = 12201,
                    TransportType = TransportType.Http,
                    Facility = "Test App"

                })
                .CreateLogger();

从这里记录任何内容时,它都会记录到控制台窗口,并且会很好地记录到文件中。 然而,Graylog 却一事无成。 我使用 Fiddler classic,能够看到来自 Web 应用程序的所有流量,并且我能够看到来自控制台应用程序的其他调用,这些调用使用 HttpClient 访问 Graylog API,但没有日志记录本身的流量。

这些是我为控制台安装的软件包。

    <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
    <PackageReference Include="Serilog" Version="4.0.0" />
    <PackageReference Include="Serilog.Sinks.Console" Version="6.0.0" />
    <PackageReference Include="Serilog.Sinks.File" Version="6.0.0" />
    <PackageReference Include="Serilog.Sinks.Graylog" Version="3.1.1" />

我还将这一行添加到设置中以尝试帮助调试。

Serilog.Debugging.SelfLog.Enable(msg => Console.WriteLine(msg));

这永远不会被激活,所以据我所知,要么什么也没有发生,要么 Serilog 没有注意到水槽不工作。我搜索过SO、ChatGPT和通用搜索引擎。 这应该有效,但事实并非如此。

编辑:我在控制台应用程序中尝试了 Serilog.Graylog.Sink 库的 3.0.2 版本,并且可以正常工作。 任何高于该版本的版本都无法在控制台应用程序中运行,但可以在 ASP.Net Core 应用程序中运行。 有些东西似乎不兼容。

编辑 2:一位评论者要求提供一个最小的可重现示例。 虽然这里的所有代码都差不多,但我已将程序合并为一个主函数的内容,该函数在我的设置中表现不佳。 代码运行时没有任何异常或出现问题的证据,它只是没有像我的 ASP.Net Core 应用程序中的消息那样显示在日志中,该应用程序的设置非常相似。

        static async Task Main(string[] args)
    {
        Serilog.Debugging.SelfLog.Enable(msg => Console.WriteLine(msg));

        Log.Logger = new LoggerConfiguration()
            .MinimumLevel.Debug()
            .Enrich.FromLogContext()
            .WriteTo.Graylog(new GraylogSinkOptions()
            {
                HostnameOrAddress = "localhost",
                Port = 12201,
                TransportType = TransportType.Http,
                Facility = "Test App",
            })
            .CreateLogger();
        Log.Information("This is a test message");
        Log.CloseAndFlush();

    }
c# asp.net .net-core serilog graylog
1个回答
0
投票
.MinimumLevel.Debug()

先尝试切换到

.MinimumLevel.Information()

看看会发生什么

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.