-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathLogger.cs
executable file
·153 lines (135 loc) · 4.83 KB
/
Logger.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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
using System;
using Microsoft.MobCAT.Services;
namespace Microsoft.MobCAT
{
public static class Logger
{
private static ILoggingService _registeredService;
private static Func<ILoggingService> _registeredServiceFunc;
/// <summary>
/// Gets the currently registered ILoggingService.
/// </summary>
/// <value>The current service.</value>
public static ILoggingService RegisteredService
{
get
{
if (_registeredService == null)
{
_registeredService = _registeredServiceFunc?.Invoke() ?? ServiceContainer.Resolve<ILoggingService>(true);
if (_registeredService == null)
{
_registeredService = new ConsoleLoggingService();
_registeredService.Log(LogType.WARNING, "No logging service was registered. Falling back to console logging.");
}
}
return _registeredService;
}
}
/// <summary>
/// Registers the ILoggingService
/// </summary>
/// <param name="service">Service to register.</param>
public static void RegisterService(ILoggingService service)
{
ServiceContainer.Register<ILoggingService>(service);
_registeredServiceFunc = null;
_registeredService = service;
}
/// <summary>
/// Lazily registers the ILoggingService
/// </summary>
/// <param name="service">Service to register.</param>
public static void RegisterService(Func<ILoggingService> service)
{
ServiceContainer.Register<ILoggingService>(service);
_registeredService = null;
_registeredServiceFunc = service;
}
/// <summary>
/// Write to debug log
/// </summary>
/// <param name="parameters">Parameters to write.</param>
public static void Debug(params object[] parameters)
{
Log(LogType.DEBUG, parameters);
}
/// <summary>
/// Write to warning log
/// </summary>
/// <param name="parameters">Parameters to write.</param>
public static void Warn(params object[] parameters)
{
Log(LogType.WARNING, parameters);
}
/// <summary>
/// Write to error log
/// </summary>
/// <param name="parameters">Parameters to write.</param>
public static void Error(params object[] parameters)
{
Log(LogType.ERROR, parameters);
}
/// <summary>
/// Write to fatal log
/// </summary>
/// <param name="parameters">Parameters to write.</param>
public static void Fatal(params object[] parameters)
{
Log(LogType.FATAL, parameters);
}
/// <summary>
/// Write to info log
/// </summary>
/// <param name="parameters">Parameters to write.</param>
public static void Info(params object[] parameters)
{
Log(LogType.INFO, parameters);
}
/// <summary>
/// Write to specified LogType
/// </summary>
/// <returns>The log.</returns>
/// <param name="logType">Log type.</param>
/// <param name="parameters">Parameters to write.</param>
public static void Log(LogType logType, params object[] parameters)
{
if (parameters == null || parameters.Length == 0)
return;
if (parameters.Length == 1)
{
if (parameters[0] is Exception exception)
{
RegisteredService.Log(logType, exception.Message, exception);
return;
}
var value = parameters[0];
if (value != null)
{
RegisteredService.Log(logType, value.ToString());
return;
}
}
var format = parameters[0] != null ? parameters[0].ToString() : "";
var message = format;
try
{
var args = new object[parameters.Length - 1];
Array.Copy(parameters, 1, args, 0, parameters.Length - 1);
message = string.Format(format, args);
}
catch (Exception exc)
{
RegisteredService.Log(LogType.INFO, string.Format("An error occured formatting the logging message: [{0}]", format), exc);
}
if (parameters[parameters.Length - 1] is Exception ex)
{
RegisteredService.Log(logType, message, ex);
}
else
{
RegisteredService.Log(logType, message);
}
}
}
}