Serilog未能将日志记录到Elasticsearch。

4
我跟随了Serilog Elasticsearch的教程:https://github.com/serilog/serilog-sinks-elasticsearch#handling-errors,但什么也没发生。我看到其他相关的SO帖子提出了建议和可接受的答案,但是没有任何作用。没有错误,控制台和文件sink工作正常,但ES从未被写入。以下是我使用的代码:
using System;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Serilog;
using Serilog.Events;
using Serilog.Formatting.Json;
using Serilog.Sinks.Elasticsearch;
using Serilog.Sinks.File;

namespace aspnet.serilog.sample
{
    public class Program
    {
        public static readonly ILogger logger;

        static Program()
        {
            logger = new LoggerConfiguration() // = Log.Logger = new LoggerConfiguration()
               .Enrich.FromLogContext()
               .MinimumLevel.Information()
               .WriteTo.ColoredConsole(
                   LogEventLevel.Information,
                   "{NewLine}{Timestamp:HH:mm:ss} [{Level}] ({CorrelationToken}) {Message}{NewLine}{Exception}")
                .WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri("http://localhost:9200/")){
                    AutoRegisterTemplate = true,
                    AutoRegisterTemplateVersion = AutoRegisterTemplateVersion.ESv7,
                    IndexFormat = "test-index-{0:yyyy.MM.DD}",
                    FailureCallback = e => Console.WriteLine("Unable to submit event " + e.MessageTemplate),
                    EmitEventFailure = EmitEventFailureHandling.WriteToSelfLog |
                                   EmitEventFailureHandling.WriteToFailureSink |
                                   EmitEventFailureHandling.RaiseCallback
                    , MinimumLogEventLevel = LogEventLevel.Information
                })
                .WriteTo.File($"./failures.log", rollingInterval: RollingInterval.Day)
                .CreateLogger();
        }

        public static void Main(string[] args)
        {
            try
            {
                logger.Information($"starting test application....");
                CreateWebHostBuilder(args).Build().Run();
            }
            finally
            {
                logger.Information($"stopping test application.....");
                //Log.CloseAndFlush();
            }
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
                .UseSerilog(logger);
    }
}

我也在 Startup.cs 文件中添加了配置以添加日志记录,但没有成功。

2
要从SelfLog获取任何输出,您需要配置SelfLog静态方法。类似于Serilog.Debugging.SelfLog.Enable(Console.Error); - Adam Carr
1个回答

1

对于那些有同样困扰的人,这是我的解决方案:

  1. 从Startup.cs文件/类中删除所有日志记录
  2. 重新配置Program.cs文件如下:
using System;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Serilog;
using Serilog.Events;
using Serilog.Formatting.Json;
using Serilog.Sinks.Elasticsearch;
using Serilog.Sinks.File;

namespace aspnet.serilog.sample
{
    public class Program
    {
        public static readonly ILogger logger;

        static Program()
        {
            logger = new LoggerConfiguration()
                .MinimumLevel.Information()
                .Enrich.FromLogContext()
                .WriteTo.ColoredConsole(LogEventLevel.Information,
                   "{NewLine}{Timestamp:HH:mm:ss} [{Level}] ({CorrelationToken}) {Message}{NewLine}{Exception}")
                .WriteTo.Elasticsearch(new ElasticsearchSinkOptions(
                    new Uri("http://localhost:9200/"))
                    {
                        AutoRegisterTemplate = true,
                        //AutoRegisterTemplateVersion = AutoRegisterTemplateVersion.ESv7,
                        IndexFormat = "test-index-{0:yyyy.MM.dd}",
                        // FailureCallback = e => Console.WriteLine("Unable to submit event " + e.MessageTemplate),
                        // EmitEventFailure = EmitEventFailureHandling.WriteToSelfLog |
                        //                EmitEventFailureHandling.WriteToFailureSink |
                        //                EmitEventFailureHandling.RaiseCallback,
                        //                MinimumLogEventLevel = LogEventLevel.Information,
                        // RegisterTemplateFailure = RegisterTemplateRecovery.IndexAnyway,
                        DeadLetterIndexName = "test-deadletter-{0:yyyy.MM.dd}"
                    })
                .WriteTo.File($"./failures.log", rollingInterval: RollingInterval.Day)
                .CreateLogger();
        }

        public static void Main(string[] args)
        {
            try
            {
                logger.Information($"starting test application....");
                CreateWebHostBuilder(args).Build().Run();
            }
            finally
            {
                logger.Information($"stopping test application.....");
                //Log.CloseAndFlush();
                //((IDisposable)logger)?.Dispose();
            }
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
                .UseSerilog(logger);
    }
}

我保留了评论,以便查看哪些内容不起作用


1
你能提供更多关于出了什么问题的细节吗? - Павле

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接