/
LoggingConfigurator.cs
111 lines (94 loc) · 4.25 KB
/
LoggingConfigurator.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
namespace ServiceControl.Monitoring
{
using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
using Configuration;
using NLog;
using NLog.Common;
using NLog.Config;
using NLog.Extensions.Logging;
using NLog.Layouts;
using NLog.Targets;
using NServiceBus.Extensions.Logging;
using LogManager = NServiceBus.Logging.LogManager;
static class LoggingConfigurator
{
public static void Configure(Settings settings, bool logToConsole)
{
if (NLog.LogManager.Configuration != null)
{
return;
}
var version = FileVersionInfo.GetVersionInfo(typeof(LoggingConfigurator).Assembly.Location).ProductVersion;
var nlogConfig = new LoggingConfiguration();
var simpleLayout = new SimpleLayout("${longdate}|${threadid}|${level}|${logger}|${message}${onexception:|${exception:format=tostring}}");
var header = $@"-------------------------------------------------------------
ServiceControl Monitoring Version: {version}
Selected Transport: {settings.TransportType}
-------------------------------------------------------------";
var fileTarget = new FileTarget
{
ArchiveEvery = FileArchivePeriod.Day,
FileName = Path.Combine(settings.LogPath, "logfile.${shortdate}.txt"),
ArchiveFileName = Path.Combine(settings.LogPath, "logfile.{#}.txt"),
ArchiveNumbering = ArchiveNumberingMode.DateAndSequence,
Layout = simpleLayout,
MaxArchiveFiles = 14,
ArchiveAboveSize = 30 * MegaByte,
Header = new SimpleLayout(header)
};
var consoleTarget = new ColoredConsoleTarget
{
Layout = simpleLayout,
UseDefaultRowHighlightingRules = true
};
var nullTarget = new NullTarget();
nlogConfig.AddTarget("console", consoleTarget);
nlogConfig.AddTarget("debugger", fileTarget);
nlogConfig.AddTarget("null", nullTarget);
//Suppress NSB license logging since this will have it's own
nlogConfig.LoggingRules.Add(new LoggingRule("NServiceBus.LicenseManager", LogLevel.Info, nullTarget) { Final = true });
// Always want to see license logging regardless of default logging level
nlogConfig.LoggingRules.Add(new LoggingRule("ServiceControl.Monitoring.Licensing.*", LogLevel.Info, fileTarget));
nlogConfig.LoggingRules.Add(new LoggingRule("ServiceControl.Monitoring.Licensing.*", LogLevel.Info, consoleTarget)
{
Final = true
});
// Defaults
nlogConfig.LoggingRules.Add(new LoggingRule("*", settings.LogLevel, fileTarget));
nlogConfig.LoggingRules.Add(new LoggingRule("*", settings.LogLevel < LogLevel.Info ? settings.LogLevel : LogLevel.Info, consoleTarget));
if (!logToConsole)
{
foreach (var rule in nlogConfig.LoggingRules.Where(p => p.Targets.Contains(consoleTarget)).ToList())
{
nlogConfig.LoggingRules.Remove(rule);
}
}
NLog.LogManager.Configuration = nlogConfig;
LogManager.UseFactory(new ExtensionsLoggerFactory(new NLogLoggerFactory()));
var logger = LogManager.GetLogger("LoggingConfiguration");
var logEventInfo = new LogEventInfo
{
TimeStamp = DateTime.UtcNow
};
logger.InfoFormat("Logging to {0} with LogLevel '{1}'", fileTarget.FileName.Render(logEventInfo), settings.LogLevel.Name);
}
public static LogLevel InitializeLevel()
{
var level = LogLevel.Info;
try
{
level = LogLevel.FromString(SettingsReader.Read(Settings.SettingsRootNamespace, LogLevelKey, LogLevel.Info.Name));
}
catch
{
InternalLogger.Warn($"Failed to parse {LogLevelKey} setting. Defaulting to Warn.");
}
return level;
}
const long MegaByte = 1024 * 1024;
const string LogLevelKey = "LogLevel";
}
}