在ASP.NET Core中通过在Startup中下面的配置可以将日志记录到控制台,但不会记录日志时间,请问如何配置可以记录日志时间?
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
使用Serilog并配置其输出到控制台可解决这个问题
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.Console()
.CreateLogger();
var host = WebHostBuilder.CreateDefault()
.UseStartup<Startup>()
.UseSerilog()
.Build();
host.Run();
貌似不能统一配置:https://github.com/aspnet/Logging/issues/483
只能写日志一个一个添加:logger.Log(LogLevel.Information, 1, someObj, null, (s, e) => DateTime.Now + " " + s.ToString());
自定义Log Provider可行?
把默认的扩展方法的所有重载 替换成自己的。 _logger.LogDebug() -->_logger.Debug()
public static class LoggerExtensions { private static readonly Func<object, Exception, string> _messageFormatter = (o,e)=>$"{DateTime.Now} {o}"; public static void Debug(this ILogger logger, EventId eventId, Exception exception, string message, params object[] args) { if (logger == null) { throw new ArgumentNullException(nameof(logger)); } logger.Log(LogLevel.Debug, eventId, new FormattedLogValues(message, args), exception, _messageFormatter); } }
另外,推荐个github.com/serilog,.net core 官方推荐的几个第三方结构化日志组件之一。
可以直接把日志记录到ElasticSearch ,然后用Kibana 查看,分析日志。
日期,EventID,Exception,这些都是分成字段保存的,不是揉到一起的字符串。
java 的 ELK栈 (logstash,elasticsearch,kibana) 的改进版 (serilog,elasticsearch,kibana)。 中间少几次logstash转换,更方便,高效。