Skip to content

Commit 4529765

Browse files
Andrin Meierretailcoder
authored andcommitted
allow user to specify log level in settings (#1497) (#1597)
1 parent eaf2de5 commit 4529765

11 files changed

+402
-196
lines changed

RetailCoder.VBE/App.cs

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -145,18 +145,8 @@ private void UpdateLoggingLevel()
145145
{
146146
return;
147147
}
148-
if (_config.UserSettings.GeneralSettings.DetailedLoggingEnabled)
149-
{
150-
// "Enable" should have been called "Add" perhaps?
151-
fileRule.EnableLoggingForLevel(LogLevel.Trace);
152-
fileRule.EnableLoggingForLevel(LogLevel.Debug);
153-
}
154-
else
155-
{
156-
fileRule.DisableLoggingForLevel(LogLevel.Trace);
157-
fileRule.DisableLoggingForLevel(LogLevel.Debug);
158-
}
159-
LogManager.ReconfigExistingLoggers();
148+
LogManager.EnableLogging();
149+
LogLevelHelper.SetMinimumLogLevel(fileRule, LogLevel.FromOrdinal(_config.UserSettings.GeneralSettings.MinimumLogLevel));
160150
}
161151

162152
public void Startup()
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
using NLog;
2+
using NLog.Config;
3+
using System;
4+
using System.Collections.Generic;
5+
using System.Collections.ObjectModel;
6+
using System.Linq;
7+
using System.Text;
8+
using System.Threading.Tasks;
9+
10+
namespace Rubberduck.Common
11+
{
12+
public static class LogLevelHelper
13+
{
14+
private static readonly Lazy<IEnumerable<LogLevel>> _logLevels = new Lazy<IEnumerable<LogLevel>>(GetLogLevels);
15+
16+
public static IEnumerable<LogLevel> LogLevels
17+
{
18+
get
19+
{
20+
return _logLevels.Value;
21+
}
22+
}
23+
24+
private static IEnumerable<LogLevel> GetLogLevels()
25+
{
26+
var logLevels = new List<LogLevel>();
27+
logLevels.Add(LogLevel.Off);
28+
for (int logLevelOrdinal = 0; logLevelOrdinal <= 5; logLevelOrdinal++)
29+
{
30+
logLevels.Add(LogLevel.FromOrdinal(logLevelOrdinal));
31+
}
32+
return logLevels;
33+
}
34+
35+
public static void SetMinimumLogLevel(LoggingRule loggingRule, LogLevel minimumLogLevel)
36+
{
37+
ClearLogLevels(loggingRule);
38+
if (minimumLogLevel == LogLevel.Off)
39+
{
40+
LogManager.DisableLogging();
41+
LogManager.ReconfigExistingLoggers();
42+
return;
43+
}
44+
LogManager.EnableLogging();
45+
foreach (var logLevel in LogLevels)
46+
{
47+
if (logLevel != LogLevel.Off && logLevel >= minimumLogLevel)
48+
{
49+
loggingRule.EnableLoggingForLevel(logLevel);
50+
}
51+
}
52+
LogManager.ReconfigExistingLoggers();
53+
}
54+
55+
private static void ClearLogLevels(LoggingRule loggingRule)
56+
{
57+
foreach (var logLevel in LogLevels)
58+
{
59+
if (logLevel != LogLevel.Off && loggingRule.IsLoggingEnabledForLevel(logLevel))
60+
{
61+
loggingRule.DisableLoggingForLevel(logLevel);
62+
}
63+
}
64+
}
65+
}
66+
}

RetailCoder.VBE/Rubberduck.csproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,7 @@
303303
<Compile Include="Common\IAttachable.cs" />
304304
<Compile Include="Common\Hotkeys\IHotkey.cs" />
305305
<Compile Include="Common\IRubberduckHooks.cs" />
306+
<Compile Include="Common\LogLevelHelper.cs" />
306307
<Compile Include="Common\ModuleExporter.cs" />
307308
<Compile Include="Common\WinAPI\IRawDevice.cs" />
308309
<Compile Include="Common\WinAPI\KeyMap.cs" />
@@ -384,6 +385,7 @@
384385
<Compile Include="Settings\GeneralConfigProvider.cs" />
385386
<Compile Include="Settings\HotkeySettings.cs" />
386387
<Compile Include="Settings\HotkeyConfigProvider.cs" />
388+
<Compile Include="Settings\MinimumLogLevel.cs" />
387389
<Compile Include="Settings\RubberduckHotkey.cs" />
388390
<Compile Include="Settings\ToDoListConfigProvider.cs" />
389391
<Compile Include="Settings\UnitTestConfigProvider.cs" />

RetailCoder.VBE/Settings/GeneralSettings.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System.Xml.Serialization;
1+
using NLog;
2+
using System.Xml.Serialization;
23

34
namespace Rubberduck.Settings
45
{
@@ -8,7 +9,7 @@ public interface IGeneralSettings
89
bool AutoSaveEnabled { get; set; }
910
int AutoSavePeriod { get; set; }
1011
char Delimiter { get; set; }
11-
bool DetailedLoggingEnabled { get; set; }
12+
int MinimumLogLevel { get; set; }
1213
}
1314

1415
[XmlType(AnonymousType = true)]
@@ -18,15 +19,15 @@ public class GeneralSettings : IGeneralSettings
1819
public bool AutoSaveEnabled { get; set; }
1920
public int AutoSavePeriod { get; set; }
2021
public char Delimiter { get; set; }
21-
public bool DetailedLoggingEnabled { get; set; }
22+
public int MinimumLogLevel { get; set; }
2223

2324
public GeneralSettings()
2425
{
2526
Language = new DisplayLanguageSetting("en-US");
2627
AutoSaveEnabled = false;
2728
AutoSavePeriod = 10;
2829
Delimiter = '.';
29-
DetailedLoggingEnabled = false;
30+
MinimumLogLevel = LogLevel.Off.Ordinal;
3031
}
3132

3233
public GeneralSettings(
@@ -39,7 +40,6 @@ public GeneralSettings(
3940
AutoSaveEnabled = autoSaveEnabled;
4041
AutoSavePeriod = autoSavePeriod;
4142
Delimiter = '.';
42-
DetailedLoggingEnabled = detailedLoggingEnabled;
4343
}
4444
}
4545
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
using Rubberduck.UI;
2+
3+
namespace Rubberduck.Settings
4+
{
5+
public sealed class MinimumLogLevel
6+
{
7+
private readonly int _ordinal;
8+
private readonly string _name;
9+
10+
public MinimumLogLevel(int ordinal, string logLevelName)
11+
{
12+
_ordinal = ordinal;
13+
_name = RubberduckUI.ResourceManager.GetString("GeneralSettings_" + logLevelName + "LogLevel");
14+
}
15+
16+
public int Ordinal
17+
{
18+
get
19+
{
20+
return _ordinal;
21+
}
22+
}
23+
24+
public string Name
25+
{
26+
get
27+
{
28+
return _name;
29+
}
30+
}
31+
}
32+
}

RetailCoder.VBE/UI/RubberduckUI.Designer.cs

Lines changed: 60 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

RetailCoder.VBE/UI/RubberduckUI.de.resx

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1567,10 +1567,28 @@ Allen Sternguckern, Likern &amp; Followern, für das warme Kribbeln
15671567
<data name="Parser_ParserError" xml:space="preserve">
15681568
<value>Parserfehler</value>
15691569
</data>
1570-
<data name="GeneralSettings_DetailedLoggingEnabled" xml:space="preserve">
1571-
<value>Detailliertes Logging</value>
1570+
<data name="GeneralSettings_MinimumLogLevelLabel" xml:space="preserve">
1571+
<value>Minimum Log Level</value>
15721572
</data>
1573-
<data name="GeneralSettings_DetailedLoggingEnabledLabel" xml:space="preserve">
1574-
<value>Detailliertes Logging aktivieren:</value>
1573+
<data name="GeneralSettings_DebugLogLevel" xml:space="preserve">
1574+
<value>Debug</value>
1575+
</data>
1576+
<data name="GeneralSettings_ErrorLogLevel" xml:space="preserve">
1577+
<value>Fehler</value>
1578+
</data>
1579+
<data name="GeneralSettings_FatalLogLevel" xml:space="preserve">
1580+
<value>Fatal</value>
1581+
</data>
1582+
<data name="GeneralSettings_InfoLogLevel" xml:space="preserve">
1583+
<value>Info</value>
1584+
</data>
1585+
<data name="GeneralSettings_OffLogLevel" xml:space="preserve">
1586+
<value>Kein Logging</value>
1587+
</data>
1588+
<data name="GeneralSettings_TraceLogLevel" xml:space="preserve">
1589+
<value>Trace</value>
1590+
</data>
1591+
<data name="GeneralSettings_WarnLogLevel" xml:space="preserve">
1592+
<value>Warnung</value>
15751593
</data>
15761594
</root>

0 commit comments

Comments
 (0)