New: Add Compact Log Event Format option for console logging

(cherry picked from commit 0d914f4c53876540ed2df83ad3d71615c013856f)
pull/2197/head
Mark McDowall 5 months ago committed by Bogdan
parent d7d5a2dd42
commit 1aafb0b201

@ -3,6 +3,7 @@ using System.Diagnostics;
using System.IO; using System.IO;
using NLog; using NLog;
using NLog.Config; using NLog.Config;
using NLog.Layouts.ClefJsonLayout;
using NLog.Targets; using NLog.Targets;
using NzbDrone.Common.EnvironmentInfo; using NzbDrone.Common.EnvironmentInfo;
using NzbDrone.Common.Extensions; using NzbDrone.Common.Extensions;
@ -13,6 +14,8 @@ namespace NzbDrone.Common.Instrumentation
public static class NzbDroneLogger public static class NzbDroneLogger
{ {
private const string FILE_LOG_LAYOUT = @"${date:format=yyyy-MM-dd HH\:mm\:ss.f}|${level}|${logger}|${message}${onexception:inner=${newline}${newline}[v${assembly-version}] ${exception:format=ToString}${newline}${exception:format=Data}${newline}}"; private const string FILE_LOG_LAYOUT = @"${date:format=yyyy-MM-dd HH\:mm\:ss.f}|${level}|${logger}|${message}${onexception:inner=${newline}${newline}[v${assembly-version}] ${exception:format=ToString}${newline}${exception:format=Data}${newline}}";
public const string ConsoleLogLayout = "[${level}] ${logger}: ${message} ${onexception:inner=${newline}${newline}[v${assembly-version}] ${exception:format=ToString}${newline}${exception:format=Data}${newline}}";
public static CompactJsonLayout ClefLogLayout = new CompactJsonLayout();
private static bool _isConfigured; private static bool _isConfigured;
@ -111,7 +114,16 @@ namespace NzbDrone.Common.Instrumentation
var coloredConsoleTarget = new ColoredConsoleTarget(); var coloredConsoleTarget = new ColoredConsoleTarget();
coloredConsoleTarget.Name = "consoleLogger"; coloredConsoleTarget.Name = "consoleLogger";
coloredConsoleTarget.Layout = "[${level}] ${logger}: ${message} ${onexception:inner=${newline}${newline}[v${assembly-version}] ${exception:format=ToString}${newline}${exception:format=Data}${newline}}";
var logFormat = Enum.TryParse<ConsoleLogFormat>(Environment.GetEnvironmentVariable("PROWLARR__LOG__CONSOLEFORMAT"), out var formatEnumValue)
? formatEnumValue
: ConsoleLogFormat.Standard;
coloredConsoleTarget.Layout = logFormat switch
{
ConsoleLogFormat.Clef => ClefLogLayout,
_ => ConsoleLogLayout
};
var loggingRule = new LoggingRule("*", level, coloredConsoleTarget); var loggingRule = new LoggingRule("*", level, coloredConsoleTarget);
@ -206,4 +218,10 @@ namespace NzbDrone.Common.Instrumentation
return GetLogger(obj.GetType()); return GetLogger(obj.GetType());
} }
} }
public enum ConsoleLogFormat
{
Standard,
Clef
}
} }

@ -7,6 +7,7 @@ public class LogOptions
public int? Rotate { get; set; } public int? Rotate { get; set; }
public bool? Sql { get; set; } public bool? Sql { get; set; }
public string ConsoleLevel { get; set; } public string ConsoleLevel { get; set; }
public string ConsoleFormat { get; set; }
public bool? AnalyticsEnabled { get; set; } public bool? AnalyticsEnabled { get; set; }
public string SyslogServer { get; set; } public string SyslogServer { get; set; }
public int? SyslogPort { get; set; } public int? SyslogPort { get; set; }

@ -9,6 +9,7 @@
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="6.0.2" /> <PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="6.0.2" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="NLog" Version="5.3.3" /> <PackageReference Include="NLog" Version="5.3.3" />
<PackageReference Include="NLog.Layouts.ClefJsonLayout" Version="1.0.0" />
<PackageReference Include="NLog.Extensions.Logging" Version="5.3.12" /> <PackageReference Include="NLog.Extensions.Logging" Version="5.3.12" />
<PackageReference Include="Npgsql" Version="7.0.7" /> <PackageReference Include="Npgsql" Version="7.0.7" />
<PackageReference Include="Sentry" Version="4.0.2" /> <PackageReference Include="Sentry" Version="4.0.2" />

@ -10,6 +10,7 @@ using NzbDrone.Common.Cache;
using NzbDrone.Common.Disk; using NzbDrone.Common.Disk;
using NzbDrone.Common.EnvironmentInfo; using NzbDrone.Common.EnvironmentInfo;
using NzbDrone.Common.Extensions; using NzbDrone.Common.Extensions;
using NzbDrone.Common.Instrumentation;
using NzbDrone.Common.Options; using NzbDrone.Common.Options;
using NzbDrone.Core.Authentication; using NzbDrone.Core.Authentication;
using NzbDrone.Core.Configuration.Events; using NzbDrone.Core.Configuration.Events;
@ -38,6 +39,7 @@ namespace NzbDrone.Core.Configuration
bool AnalyticsEnabled { get; } bool AnalyticsEnabled { get; }
string LogLevel { get; } string LogLevel { get; }
string ConsoleLogLevel { get; } string ConsoleLogLevel { get; }
ConsoleLogFormat ConsoleLogFormat { get; }
bool LogSql { get; } bool LogSql { get; }
int LogRotate { get; } int LogRotate { get; }
bool FilterSentryEvents { get; } bool FilterSentryEvents { get; }
@ -225,6 +227,11 @@ namespace NzbDrone.Core.Configuration
public string LogLevel => _logOptions.Level ?? GetValue("LogLevel", "debug").ToLowerInvariant(); public string LogLevel => _logOptions.Level ?? GetValue("LogLevel", "debug").ToLowerInvariant();
public string ConsoleLogLevel => _logOptions.ConsoleLevel ?? GetValue("ConsoleLogLevel", string.Empty, persist: false); public string ConsoleLogLevel => _logOptions.ConsoleLevel ?? GetValue("ConsoleLogLevel", string.Empty, persist: false);
public ConsoleLogFormat ConsoleLogFormat =>
Enum.TryParse<ConsoleLogFormat>(_logOptions.ConsoleFormat, out var enumValue)
? enumValue
: GetValueEnum("ConsoleLogFormat", ConsoleLogFormat.Standard, false);
public string Theme => _appOptions.Theme ?? GetValue("Theme", "auto", persist: false); public string Theme => _appOptions.Theme ?? GetValue("Theme", "auto", persist: false);
public string PostgresHost => _postgresOptions?.Host ?? GetValue("PostgresHost", string.Empty, persist: false); public string PostgresHost => _postgresOptions?.Host ?? GetValue("PostgresHost", string.Empty, persist: false);

@ -2,6 +2,7 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using NLog; using NLog;
using NLog.Config; using NLog.Config;
using NLog.Targets;
using NLog.Targets.Syslog; using NLog.Targets.Syslog;
using NLog.Targets.Syslog.Settings; using NLog.Targets.Syslog.Settings;
using NzbDrone.Common.EnvironmentInfo; using NzbDrone.Common.EnvironmentInfo;
@ -50,7 +51,8 @@ namespace NzbDrone.Core.Instrumentation
var rules = LogManager.Configuration.LoggingRules; var rules = LogManager.Configuration.LoggingRules;
//Console // Console
ReconfigureConsole();
SetMinimumLogLevel(rules, "consoleLogger", minimumConsoleLogLevel); SetMinimumLogLevel(rules, "consoleLogger", minimumConsoleLogLevel);
//Log Files //Log Files
@ -109,6 +111,22 @@ namespace NzbDrone.Core.Instrumentation
} }
} }
private void ReconfigureConsole()
{
var consoleTarget = LogManager.Configuration.AllTargets.OfType<ColoredConsoleTarget>().FirstOrDefault();
if (consoleTarget != null)
{
var format = _configFileProvider.ConsoleLogFormat;
consoleTarget.Layout = format switch
{
ConsoleLogFormat.Clef => NzbDroneLogger.ClefLogLayout,
_ => NzbDroneLogger.ConsoleLogLayout
};
}
}
private void SetSyslogParameters(string syslogServer, int syslogPort, LogLevel minimumLogLevel) private void SetSyslogParameters(string syslogServer, int syslogPort, LogLevel minimumLogLevel)
{ {
var syslogTarget = new SyslogTarget(); var syslogTarget = new SyslogTarget();

Loading…
Cancel
Save