From 38eb130217b9c8eb30dd82df5cff4870fae4320d Mon Sep 17 00:00:00 2001 From: JustArchi Date: Mon, 4 Jul 2016 22:30:29 +0200 Subject: [PATCH] Add support for logging/catching also very early messages --- ArchiSteamFarm/Logging.cs | 53 +++++++++++++++++++++++---------------- ArchiSteamFarm/Program.cs | 4 ++- 2 files changed, 35 insertions(+), 22 deletions(-) diff --git a/ArchiSteamFarm/Logging.cs b/ArchiSteamFarm/Logging.cs index 99dce3bd8..14f4640a1 100644 --- a/ArchiSteamFarm/Logging.cs +++ b/ArchiSteamFarm/Logging.cs @@ -39,35 +39,18 @@ namespace ArchiSteamFarm { private static readonly HashSet ConsoleLoggingRules = new HashSet(); private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); - internal static void Init() { + private static bool IsUsingCustomConfiguration; + + internal static void InitCoreLoggers() { if (LogManager.Configuration != null) { // User provided custom NLog config, or we have it set already, so don't override it + IsUsingCustomConfiguration = true; InitConsoleLoggers(); return; } LoggingConfiguration config = new LoggingConfiguration(); - if (Program.GlobalConfig.LogToFile) { - FileTarget fileTarget = new FileTarget("File") { - DeleteOldFileOnStartup = true, - FileName = Program.LogFile, - Layout = Layout - }; - - config.AddTarget(fileTarget); - config.LoggingRules.Add(new LoggingRule("*", LogLevel.Trace, fileTarget)); - } - - if (Program.IsRunningAsService) { - EventLogTarget eventLogTarget = new EventLogTarget("EventLog") { - Layout = Layout - }; - - config.AddTarget(eventLogTarget); - config.LoggingRules.Add(new LoggingRule("*", LogLevel.Trace, eventLogTarget)); - } - ColoredConsoleTarget consoleTarget = new ColoredConsoleTarget("Console") { Layout = Layout }; @@ -79,6 +62,34 @@ namespace ArchiSteamFarm { InitConsoleLoggers(); } + internal static void InitEnhancedLoggers() { + if (IsUsingCustomConfiguration) { + return; + } + + if (Program.GlobalConfig.LogToFile) { + FileTarget fileTarget = new FileTarget("File") { + DeleteOldFileOnStartup = true, + FileName = Program.LogFile, + Layout = Layout + }; + + LogManager.Configuration.AddTarget(fileTarget); + LogManager.Configuration.LoggingRules.Add(new LoggingRule("*", LogLevel.Trace, fileTarget)); + } + + if (Program.IsRunningAsService) { + EventLogTarget eventLogTarget = new EventLogTarget("EventLog") { + Layout = Layout + }; + + LogManager.Configuration.AddTarget(eventLogTarget); + LogManager.Configuration.LoggingRules.Add(new LoggingRule("*", LogLevel.Trace, eventLogTarget)); + } + + LogGenericInfo("Logging module initialized!"); + } + internal static void OnUserInputStart() { if (ConsoleLoggingRules.Count == 0) { return; diff --git a/ArchiSteamFarm/Program.cs b/ArchiSteamFarm/Program.cs index 50b48a462..1119cbf41 100644 --- a/ArchiSteamFarm/Program.cs +++ b/ArchiSteamFarm/Program.cs @@ -458,7 +458,9 @@ namespace ArchiSteamFarm { AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionHandler; TaskScheduler.UnobservedTaskException += UnobservedTaskExceptionHandler; + Logging.InitCoreLoggers(); Logging.LogGenericInfo("ASF V" + Version); + Directory.SetCurrentDirectory(ExecutableDirectory); InitServices(); @@ -502,7 +504,7 @@ namespace ArchiSteamFarm { } // From now on it's server mode - Logging.Init(); + Logging.InitEnhancedLoggers(); if (!Directory.Exists(ConfigDirectory)) { Logging.LogGenericError("Config directory doesn't exist!");