Serilog 不记录到 Elasticsearch
Serilog Not Logging to Elasticsearch
在此处遵循 Serilog Elasticsearch 教程:
https://github.com/serilog/serilog-sinks-elasticsearch#handling-errors
没有任何效果。我看过其他相关的 SO 帖子,这些帖子有建议+接受的答案,但没有任何效果。没有错误,控制台和文件接收器工作,但是 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 文件中添加了配置以添加日志记录,但无济于事。
对于那些有同样困难的人,这里是我的解决方案:
- 删除了 Startup.cs file/class
中的所有日志记录
- 像这样重新配置 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);
}
}
我留下了评论,看看有什么不有效。
在此处遵循 Serilog Elasticsearch 教程:
https://github.com/serilog/serilog-sinks-elasticsearch#handling-errors
没有任何效果。我看过其他相关的 SO 帖子,这些帖子有建议+接受的答案,但没有任何效果。没有错误,控制台和文件接收器工作,但是 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 文件中添加了配置以添加日志记录,但无济于事。
对于那些有同样困难的人,这里是我的解决方案:
- 删除了 Startup.cs file/class 中的所有日志记录
- 像这样重新配置 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);
}
}
我留下了评论,看看有什么不有效。