diff --git a/src/Core/Core.csproj b/src/Core/Core.csproj
index 780d0e2..c05d75c 100644
--- a/src/Core/Core.csproj
+++ b/src/Core/Core.csproj
@@ -23,11 +23,11 @@
-
-
+
+
+
-
diff --git a/src/Core/Database/LoggingAdapter/NpgsqlLoggingAdapter.cs b/src/Core/Database/LoggingAdapter/NpgsqlLoggingAdapter.cs
index 8a46c0d..29acb93 100644
--- a/src/Core/Database/LoggingAdapter/NpgsqlLoggingAdapter.cs
+++ b/src/Core/Database/LoggingAdapter/NpgsqlLoggingAdapter.cs
@@ -1,7 +1,8 @@
using System;
using Geekbot.Core.Logger;
+using Microsoft.Extensions.Logging;
using Npgsql.Logging;
-using LogLevel = NLog.LogLevel;
+using Serilog.Events;
namespace Geekbot.Core.Database.LoggingAdapter
{
@@ -21,7 +22,7 @@ namespace Geekbot.Core.Database.LoggingAdapter
public override bool IsEnabled(NpgsqlLogLevel level)
{
- return (_runParameters.DbLogging && _geekbotLogger.GetNLogger().IsEnabled(ToGeekbotLogLevel(level)));
+ return (_runParameters.DbLogging && _geekbotLogger.GetLogger().IsEnabled(ToGeekbotLogLevel(level)));
}
public override void Log(NpgsqlLogLevel level, int connectorId, string msg, Exception exception = null)
@@ -51,16 +52,16 @@ namespace Geekbot.Core.Database.LoggingAdapter
}
}
- private static LogLevel ToGeekbotLogLevel(NpgsqlLogLevel level)
+ private static LogEventLevel ToGeekbotLogLevel(NpgsqlLogLevel level)
{
return level switch
{
- NpgsqlLogLevel.Trace => LogLevel.Trace,
- NpgsqlLogLevel.Debug => LogLevel.Debug,
- NpgsqlLogLevel.Info => LogLevel.Info,
- NpgsqlLogLevel.Warn => LogLevel.Warn,
- NpgsqlLogLevel.Error => LogLevel.Error,
- NpgsqlLogLevel.Fatal => LogLevel.Fatal,
+ NpgsqlLogLevel.Trace => LogEventLevel.Verbose,
+ NpgsqlLogLevel.Debug => LogEventLevel.Debug,
+ NpgsqlLogLevel.Info => LogEventLevel.Information,
+ NpgsqlLogLevel.Warn => LogEventLevel.Warning,
+ NpgsqlLogLevel.Error => LogEventLevel.Error,
+ NpgsqlLogLevel.Fatal => LogEventLevel.Fatal,
_ => throw new ArgumentOutOfRangeException(nameof(level))
};
}
diff --git a/src/Core/Logger/GeekbotLogger.cs b/src/Core/Logger/GeekbotLogger.cs
index 652faef..d9b7752 100644
--- a/src/Core/Logger/GeekbotLogger.cs
+++ b/src/Core/Logger/GeekbotLogger.cs
@@ -6,13 +6,13 @@ namespace Geekbot.Core.Logger
public class GeekbotLogger : IGeekbotLogger
{
private readonly bool _logAsJson;
- private readonly NLog.Logger _logger;
+ private readonly Serilog.ILogger _logger;
private readonly JsonSerializerSettings _serializerSettings;
public GeekbotLogger(RunParameters runParameters)
{
- _logAsJson = !string.IsNullOrEmpty(runParameters.SumologicEndpoint) || runParameters.LogJson;
- _logger = LoggerFactory.CreateNLog(runParameters);
+ _logAsJson = !string.IsNullOrEmpty(runParameters.DatadogApiKey) || runParameters.LogJson;
+ _logger = LoggerFactory.CreateLogger(runParameters);
_serializerSettings = new JsonSerializerSettings
{
ReferenceLoopHandling = ReferenceLoopHandling.Serialize,
@@ -22,21 +22,21 @@ namespace Geekbot.Core.Logger
}
public void Trace(LogSource source, string message, object extra = null)
- => _logger.Trace(CreateLogString("Trace", source, message, null, extra));
+ => _logger.Verbose(CreateLogString("Trace", source, message, null, extra));
public void Debug(LogSource source, string message, object extra = null)
=> _logger.Debug(CreateLogString("Debug", source, message, null, extra));
public void Information(LogSource source, string message, object extra = null)
- => _logger.Info(CreateLogString("Information", source, message, null, extra));
+ => _logger.Information(CreateLogString("Information", source, message, null, extra));
public void Warning(LogSource source, string message, Exception stackTrace = null, object extra = null)
- => _logger.Warn(CreateLogString("Warning", source, message, stackTrace, extra));
+ => _logger.Warning(CreateLogString("Warning", source, message, stackTrace, extra));
public void Error(LogSource source, string message, Exception stackTrace, object extra = null)
=> _logger.Error(stackTrace, CreateLogString("Error", source, message, stackTrace, extra));
- public NLog.Logger GetNLogger() => _logger;
+ public Serilog.ILogger GetLogger() => _logger;
public bool LogAsJson() => _logAsJson;
diff --git a/src/Core/Logger/IGeekbotLogger.cs b/src/Core/Logger/IGeekbotLogger.cs
index 1363629..3359d10 100644
--- a/src/Core/Logger/IGeekbotLogger.cs
+++ b/src/Core/Logger/IGeekbotLogger.cs
@@ -9,7 +9,7 @@ namespace Geekbot.Core.Logger
void Information(LogSource source, string message, object extra = null);
void Warning(LogSource source, string message, Exception stackTrace = null, object extra = null);
void Error(LogSource source, string message, Exception stackTrace, object extra = null);
- NLog.Logger GetNLogger();
+ Serilog.ILogger GetLogger();
bool LogAsJson();
}
}
\ No newline at end of file
diff --git a/src/Core/Logger/LoggerFactory.cs b/src/Core/Logger/LoggerFactory.cs
index bf3d926..d44c331 100644
--- a/src/Core/Logger/LoggerFactory.cs
+++ b/src/Core/Logger/LoggerFactory.cs
@@ -1,64 +1,104 @@
using System;
-using System.Text;
-using NLog;
-using NLog.Config;
-using NLog.Targets;
-using SumoLogic.Logging.NLog;
+using Serilog;
+using Serilog.Events;
+using Serilog.Sinks.Datadog.Logs;
namespace Geekbot.Core.Logger
{
public class LoggerFactory
{
- public static NLog.Logger CreateNLog(RunParameters runParameters)
+ public static ILogger CreateLogger(RunParameters runParameters)
{
- var config = new LoggingConfiguration();
- var minLevel = runParameters.Verbose ? LogLevel.Trace : LogLevel.Info;
-
- if (!string.IsNullOrEmpty(runParameters.SumologicEndpoint))
+ var logger = new LoggerConfiguration();
+ var minLevel = runParameters.Verbose ? LogEventLevel.Verbose : LogEventLevel.Information;
+ if (!string.IsNullOrEmpty(runParameters.DatadogApiKey))
{
- Console.WriteLine("Logging Geekbot Logs to Sumologic");
- config.LoggingRules.Add(
- new LoggingRule("*", minLevel, LogLevel.Fatal,
- new SumoLogicTarget()
- {
- Url = runParameters.SumologicEndpoint,
- SourceName = "GeekbotLogger",
- Layout = "${message}",
- UseConsoleLog = false,
- OptimizeBufferReuse = true,
- Name = "Geekbot"
- })
+ // 2nd error logger
+ var errorLogger = new LoggerConfiguration().WriteTo.Console().CreateLogger();
+ errorLogger.Information("Enabling Datadog Logger");
+
+ logger.WriteTo.DatadogLogs(
+ apiKey: runParameters.DatadogApiKey,
+ source: "GeekbotLogger",
+ service: "Geekbot",
+ host: Environment.MachineName,
+ configuration: new DatadogConfiguration()
+ {
+ Url = "https://http-intake.logs.datadoghq.eu",
+ Port = 443,
+ UseSSL = true,
+ UseTCP = false
+ },
+ logLevel: minLevel,
+ exceptionHandler: exception =>
+ {
+ var cannotSendLogEventException = exception as CannotSendLogEventException;
+ errorLogger.Error(cannotSendLogEventException, "Datadog Error");
+ }
);
}
else if (runParameters.LogJson)
{
- config.LoggingRules.Add(
- new LoggingRule("*", minLevel, LogLevel.Fatal,
- new ConsoleTarget
- {
- Name = "Console",
- Encoding = Encoding.UTF8,
- Layout = "${message}"
- }
- )
- );
+ logger.WriteTo.Console(restrictedToMinimumLevel: minLevel, outputTemplate: "{Message:lj}{NewLine}");
}
else
{
- config.LoggingRules.Add(
- new LoggingRule("*", minLevel, LogLevel.Fatal,
- new ColoredConsoleTarget
- {
- Name = "Console",
- Encoding = Encoding.UTF8,
- Layout = "[${longdate} ${level:format=FirstCharacter}] ${message} ${exception:format=toString}"
- }
- )
- );
+ logger.WriteTo.Console(restrictedToMinimumLevel: minLevel);
}
- var loggerConfig = new LogFactory {Configuration = config};
- return loggerConfig.GetCurrentClassLogger();
+ return logger.CreateLogger();
}
+
+ // public static NLog.Logger CreateNLog(RunParameters runParameters)
+ // {
+ // var config = new LoggingConfiguration();
+ // var minLevel = runParameters.Verbose ? LogLevel.Trace : LogLevel.Info;
+ //
+ // if (!string.IsNullOrEmpty(runParameters.SumologicEndpoint))
+ // {
+ // Console.WriteLine("Logging Geekbot Logs to Sumologic");
+ // config.LoggingRules.Add(
+ // new LoggingRule("*", minLevel, LogLevel.Fatal,
+ // new SumoLogicTarget()
+ // {
+ // Url = runParameters.SumologicEndpoint,
+ // SourceName = "GeekbotLogger",
+ // Layout = "${message}",
+ // UseConsoleLog = false,
+ // OptimizeBufferReuse = true,
+ // Name = "Geekbot"
+ // })
+ // );
+ // }
+ // else if (runParameters.LogJson)
+ // {
+ // config.LoggingRules.Add(
+ // new LoggingRule("*", minLevel, LogLevel.Fatal,
+ // new ConsoleTarget
+ // {
+ // Name = "Console",
+ // Encoding = Encoding.UTF8,
+ // Layout = "${message}"
+ // }
+ // )
+ // );
+ // }
+ // else
+ // {
+ // config.LoggingRules.Add(
+ // new LoggingRule("*", minLevel, LogLevel.Fatal,
+ // new ColoredConsoleTarget
+ // {
+ // Name = "Console",
+ // Encoding = Encoding.UTF8,
+ // Layout = "[${longdate} ${level:format=FirstCharacter}] ${message} ${exception:format=toString}"
+ // }
+ // )
+ // );
+ // }
+ //
+ // var loggerConfig = new LogFactory {Configuration = config};
+ // return loggerConfig.GetCurrentClassLogger();
+ // }
}
}
\ No newline at end of file
diff --git a/src/Core/RunParameters.cs b/src/Core/RunParameters.cs
index 3210587..00ff5f2 100644
--- a/src/Core/RunParameters.cs
+++ b/src/Core/RunParameters.cs
@@ -74,12 +74,15 @@ namespace Geekbot.Core
* Intergrations *
************************************/
- [Option("sumologic", HelpText = "Sumologic endpoint for logging (default: null) (env: SUMOLOGIC)")]
- public string SumologicEndpoint { get; set; } = ParamFallback("SUMOLOGIC");
+ // [Option("sumologic", HelpText = "Sumologic endpoint for logging (default: null) (env: SUMOLOGIC)")]
+ // public string SumologicEndpoint { get; set; } = ParamFallback("SUMOLOGIC");
[Option("sentry", HelpText = "Sentry endpoint for error reporting (default: null) (env: SENTRY)")]
public string SentryEndpoint { get; set; } = ParamFallback("SENTRY");
+ [Option("datadog-api-key", HelpText = "Datadog API Key (default: null) (env: DATADOG_API_KEY)")]
+ public string DatadogApiKey { get; set; } = ParamFallback("DATADOG_API_KEY");
+
/************************************
* Helper Functions *
************************************/
diff --git a/src/Web/Logging/AspLogger.cs b/src/Web/Logging/AspLogger.cs
index c18a7f3..ad6fe15 100644
--- a/src/Web/Logging/AspLogger.cs
+++ b/src/Web/Logging/AspLogger.cs
@@ -1,6 +1,7 @@
using System;
using Geekbot.Core.Logger;
using Microsoft.Extensions.Logging;
+using Serilog.Events;
namespace Geekbot.Web.Logging
{
@@ -45,7 +46,7 @@ namespace Geekbot.Web.Logging
public bool IsEnabled(LogLevel logLevel)
{
- return !_geekbotLogger.LogAsJson() && _geekbotLogger.GetNLogger().IsEnabled(ToGeekbotLogLevel(logLevel));
+ return !_geekbotLogger.LogAsJson() && _geekbotLogger.GetLogger().IsEnabled(ToGeekbotLogLevel(logLevel));
}
public IDisposable BeginScope(TState state)
@@ -53,17 +54,16 @@ namespace Geekbot.Web.Logging
return null;
}
- private static NLog.LogLevel ToGeekbotLogLevel(LogLevel level)
+ private static LogEventLevel ToGeekbotLogLevel(LogLevel level)
{
return level switch
{
- LogLevel.Trace => NLog.LogLevel.Trace,
- LogLevel.Debug => NLog.LogLevel.Debug,
- LogLevel.Information => NLog.LogLevel.Info,
- LogLevel.Warning => NLog.LogLevel.Warn,
- LogLevel.Error => NLog.LogLevel.Error,
- LogLevel.Critical => NLog.LogLevel.Fatal,
- LogLevel.None => NLog.LogLevel.Off,
+ LogLevel.Trace => LogEventLevel.Verbose,
+ LogLevel.Debug => LogEventLevel.Debug,
+ LogLevel.Information => LogEventLevel.Information,
+ LogLevel.Warning => LogEventLevel.Warning,
+ LogLevel.Error => LogEventLevel.Error,
+ LogLevel.Critical => LogEventLevel.Fatal,
_ => throw new ArgumentOutOfRangeException(nameof(level))
};
}