Прием Serilog в облаке ElasticSearch с Кибаной, не получающей сообщения - PullRequest
0 голосов
/ 10 февраля 2020

Я использую последнюю версию Serilog с ElasticSink, и у меня следующая конфигурация:

public Startup(IConfiguration configuration)
{
    Log.Logger = new LoggerConfiguration()
        .Enrich.FromLogContext()
        .WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri(elasticUri))
        {
            IndexFormat = "ConsoleAPP-{0:yyyy.MM.dd}",
            AutoRegisterTemplate = true,
            CustomFormatter = new ExceptionAsObjectJsonFormatter(renderMessage: true),
            ModifyConnectionSettings = x => x.BasicAuthentication("myusername", "mypassword"),
            EmitEventFailure =
                EmitEventFailureHandling.WriteToSelfLog |
                EmitEventFailureHandling.RaiseCallback |
                EmitEventFailureHandling.ThrowException,
            FailureCallback = e => {
                Console.WriteLine("Unable to submit event " + e.MessageTemplate);
            }
        })
        .WriteTo.File("Logs/log.txt", rollingInterval: RollingInterval.Day, rollOnFileSizeLimit: true)
        .CreateLogger();
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
{
    loggerFactory.AddSerilog();
}

, но когда я go в Кибане, у меня возникают две проблемы. 1. Я не вижу индекса ConsoleApp.... Только индекс с именем logstash-2020.02.10 2. Внутри этого индекса я вижу несколько сообщений, написанных за час go. Я не вижу никаких новых сообщений журнала, даже если есть активность

Обновление № 1: Вот как я использую его внутри контроллера

public class TestController : ControllerBase
{

    private readonly ILogger logger;

    public TestController(ILoggerFactory loggerFactory)
    {
        logger = loggerFactory.CreateLogger<TestController>();
    }


    [HttpGet]
    public string Test()
    {
        logger.LogInformation("Called Test/Test controller method");

        return "ok";
    }
}

1 Ответ

0 голосов
/ 11 февраля 2020

Я не уверен, почему вы используете фабрику логгеров. У вас есть какой-нибудь пользовательский класс логгера, который вы создали? В контроллере изменение на ILogger эквивалентно CreateLogger

public class TestController : ControllerBase
{

    private readonly ILogger<TestController > logger;

    public TestController(ILogger<TestController > _logger)
    {
        logger = _logger;
    }


    [HttpGet]
    public string Test()
    {
        logger.LogInformation("Called Test/Test controller method");

        return "ok";
    }
}

. Я также заметил, что вы вызываете CreateLogger два раза при запуске и контроллере. В чем причина проблемы?

...