C# ElasticSearch云上的Serilog接收器,Kibana未接收消息
我正在使用最新的Serilog和ElasticSink,我有以下配置:C# ElasticSearch云上的Serilog接收器,Kibana未接收消息,c#,elasticsearch,asp.net-core,kibana,serilog,C#,elasticsearch,Asp.net Core,Kibana,Serilog,我正在使用最新的Serilog和ElasticSink,我有以下配置: public Startup(IConfiguration configuration) { Log.Logger = new LoggerConfiguration() .Enrich.FromLogContext() .WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri(elasticUri)) {
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();
}
但是当我去基巴纳的时候,我有两个问题。
1.我没有看到索引ConsoleApp…
。只有名为logstash-2020.02.10的索引
2.在这个索引中,我看到一些一小时前写的消息。即使有活动,我也看不到任何新的日志消息
更新#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";
}
}
公共类TestController:ControllerBase
{
专用只读ILogger记录器;
公共测试控制器(iLogger工厂Logger工厂)
{
logger=loggerFactory.CreateLogger();
}
[HttpGet]
公共字符串测试()
{
logger.登录信息(“称为测试/测试控制器方法”);
返回“ok”;
}
}
我不知道您为什么使用logger factory。您有创建的任何自定义记录器类吗?在控制器上,更改为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";
}
}
公共类TestController:ControllerBase
{
专用只读ILogger记录器;
公共测试控制器(ILogger\u记录器)
{
记录器=_记录器;
}
[HttpGet]
公共字符串测试()
{
logger.登录信息(“称为测试/测试控制器方法”);
返回“ok”;
}
}
我还注意到您在startup和controller中调用CreateLogger两次。是什么导致了问题?需要更多关于如何声明记录器的信息。也许这个stackoverflow问题可以解决您的问题。“@phonemyatt我已经更新了我的问题,并添加了我如何呼叫Logger的片段。您是否尝试过此示例?”。据我所知,你的代码没有问题。也许回滚到正常的控制台日志并尝试查看它是否工作,检查是我将尝试的第一步