diff --git a/src/NzbDrone.Core/Configuration/ConfigFileProvider.cs b/src/NzbDrone.Core/Configuration/ConfigFileProvider.cs index 28ae85048..28e5639cd 100644 --- a/src/NzbDrone.Core/Configuration/ConfigFileProvider.cs +++ b/src/NzbDrone.Core/Configuration/ConfigFileProvider.cs @@ -45,6 +45,8 @@ namespace NzbDrone.Core.Configuration bool UpdateAutomatically { get; } UpdateMechanism UpdateMechanism { get; } string UpdateScriptPath { get; } + string SyslogServer { get; } + int SyslogPort { get; } } public class ConfigFileProvider : IConfigFileProvider @@ -213,6 +215,9 @@ namespace NzbDrone.Core.Configuration public string UpdateScriptPath => GetValue("UpdateScriptPath", "", false); + public string SyslogServer => GetValue("SyslogServer", "", persist: false); + public int SyslogPort => GetValueInt("SyslogPort", 514, persist: false); + public int GetValueInt(string key, int defaultValue, bool persist = true) { return Convert.ToInt32(GetValue(key, defaultValue, persist)); diff --git a/src/NzbDrone.Core/Instrumentation/ReconfigureLogging.cs b/src/NzbDrone.Core/Instrumentation/ReconfigureLogging.cs index 36025d64e..1f3cfcba1 100644 --- a/src/NzbDrone.Core/Instrumentation/ReconfigureLogging.cs +++ b/src/NzbDrone.Core/Instrumentation/ReconfigureLogging.cs @@ -2,6 +2,8 @@ using System.Linq; using NLog; using NLog.Config; +using NLog.Targets.Syslog; +using NLog.Targets.Syslog.Settings; using NzbDrone.Common.EnvironmentInfo; using NzbDrone.Common.Extensions; using NzbDrone.Common.Instrumentation; @@ -40,6 +42,11 @@ namespace NzbDrone.Core.Instrumentation minimumConsoleLogLevel = LogLevel.Info; } + if (_configFileProvider.SyslogServer.IsNotNullOrWhiteSpace()) + { + SetSyslogParameters(_configFileProvider.SyslogServer, _configFileProvider.SyslogPort, minimumLogLevel); + } + var rules = LogManager.Configuration.LoggingRules; //Console @@ -101,6 +108,24 @@ namespace NzbDrone.Core.Instrumentation } } + private void SetSyslogParameters(string syslogServer, int syslogPort, LogLevel minimumLogLevel) + { + var syslogTarget = new SyslogTarget(); + + syslogTarget.Name = "syslogTarget"; + syslogTarget.MessageSend.Protocol = ProtocolType.Udp; + syslogTarget.MessageSend.Udp.Port = syslogPort; + syslogTarget.MessageSend.Udp.Server = syslogServer; + syslogTarget.MessageSend.Udp.ReconnectInterval = 500; + syslogTarget.MessageCreation.Rfc = RfcNumber.Rfc5424; + syslogTarget.MessageCreation.Rfc5424.AppName = "Prowlarr"; + + var loggingRule = new LoggingRule("*", minimumLogLevel, syslogTarget); + + LogManager.Configuration.AddTarget("syslogTarget", syslogTarget); + LogManager.Configuration.LoggingRules.Add(loggingRule); + } + private List GetLogLevels() { return new List diff --git a/src/NzbDrone.Core/Prowlarr.Core.csproj b/src/NzbDrone.Core/Prowlarr.Core.csproj index e64305fbe..e7ffefc34 100644 --- a/src/NzbDrone.Core/Prowlarr.Core.csproj +++ b/src/NzbDrone.Core/Prowlarr.Core.csproj @@ -7,6 +7,7 @@ +