Skip to content

Commit 900d462

Browse files
committed
refactor(XMLDiff, XMLPatch): update log-to-file option to accept log levels and enhance logging configuration
1 parent 38cb45b commit 900d462

File tree

2 files changed

+48
-14
lines changed

2 files changed

+48
-14
lines changed

XMLDiff/Program.cs

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ public class Options
8888
private string? modifiedXml;
8989
private string? diffXml;
9090
private string? xsd;
91-
private bool logToFile;
91+
private string? logToFile;
9292
private bool onlyFullPath;
9393
private bool useAllAttributes;
9494
private bool appendToLog;
@@ -121,11 +121,20 @@ public string? Xsd
121121
set => xsd = value?.Trim();
122122
}
123123

124-
[Option('l', "log-to-file", Required = false, HelpText = "Log to a file.", Default = false)]
125-
public bool LogToFile
124+
[Option('l', "log-to-file", HelpText = "Log level (error, warn, info, debug).")]
125+
public string? LogToFile
126126
{
127127
get => logToFile;
128-
set => logToFile = value;
128+
set
129+
{
130+
string input = value?.Trim() ?? "info";
131+
var validLogLevels = new[] { "error", "warn", "info", "debug" };
132+
if (!validLogLevels.Contains(input.ToLower()))
133+
{
134+
throw new ArgumentException($"Invalid log level: {input}. Valid values are: error, warn, info, debug.");
135+
}
136+
logToFile = input.ToLower();
137+
}
129138
}
130139

131140
[Option('a', "append-to-log", Required = false, HelpText = "Append logs to the existing log file.", Default = false)]
@@ -154,13 +163,13 @@ public bool UseAllAttributes
154163

155164
#region Logging Configuration
156165

157-
private static void ConfigureLogging(bool logToFile, bool appendToLog = false)
166+
private static void ConfigureLogging(string? logToFile, bool appendToLog = false)
158167
{
159168
var config = new NLog.Config.LoggingConfiguration();
160169

161170
// Targets
162171
var logConsole = new NLog.Targets.ConsoleTarget("logConsole");
163-
if (logToFile)
172+
if (!string.IsNullOrEmpty(logToFile))
164173
{
165174
var logFile = new NLog.Targets.FileTarget("logFile")
166175
{
@@ -171,7 +180,15 @@ private static void ConfigureLogging(bool logToFile, bool appendToLog = false)
171180
ArchiveAboveSize = 0,
172181
ConcurrentWrites = true,
173182
};
174-
config.AddRule(LogLevel.Debug, LogLevel.Fatal, logFile);
183+
LogLevel minLogLevel = logToFile switch
184+
{
185+
"error" => LogLevel.Error,
186+
"warn" => LogLevel.Warn,
187+
"info" => LogLevel.Info,
188+
"debug" => LogLevel.Debug,
189+
_ => LogLevel.Info,
190+
};
191+
config.AddRule(minLogLevel, LogLevel.Fatal, logFile);
175192
}
176193
logConsole.Layout = "${longdate} ${level} ${message} ${exception}";
177194

XMLPatch/Program.cs

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ public class Options
8989
private string? diffXml;
9090
private string? outputXml;
9191
private string? xsd;
92-
private bool logToFile;
92+
private string? logToFile;
9393
private bool appendToLog;
9494

9595
[Option('o', "original_xml", Required = true, HelpText = "Path to the original XML file or directory.")]
@@ -120,11 +120,20 @@ public string? Xsd
120120
set => xsd = value?.Trim();
121121
}
122122

123-
[Option('l', "log-to-file", Required = false, HelpText = "Log to a file.", Default = false)]
124-
public bool LogToFile
123+
[Option('l', "log-to-file", HelpText = "Log level (error, warn, info, debug).")]
124+
public string? LogToFile
125125
{
126126
get => logToFile;
127-
set => logToFile = value;
127+
set
128+
{
129+
string input = value?.Trim() ?? "info";
130+
var validLogLevels = new[] { "error", "warn", "info", "debug" };
131+
if (!validLogLevels.Contains(input.ToLower()))
132+
{
133+
throw new ArgumentException($"Invalid log level: {input}. Valid values are: error, warn, info, debug.");
134+
}
135+
logToFile = input.ToLower();
136+
}
128137
}
129138

130139
[Option('a', "append-to-log", Required = false, HelpText = "Append logs to the existing log file.", Default = false)]
@@ -139,13 +148,13 @@ public bool AppendToLog
139148

140149
#region Logging Configuration
141150

142-
private static void ConfigureLogging(bool logToFile, bool appendToLog = false)
151+
private static void ConfigureLogging(string? logToFile, bool appendToLog = false)
143152
{
144153
var config = new NLog.Config.LoggingConfiguration();
145154

146155
// Targets
147156
var logConsole = new NLog.Targets.ConsoleTarget("logConsole");
148-
if (logToFile)
157+
if (!string.IsNullOrEmpty(logToFile))
149158
{
150159
var logFile = new NLog.Targets.FileTarget("logFile")
151160
{
@@ -156,7 +165,15 @@ private static void ConfigureLogging(bool logToFile, bool appendToLog = false)
156165
ArchiveAboveSize = 0,
157166
ConcurrentWrites = true,
158167
};
159-
config.AddRule(LogLevel.Debug, LogLevel.Fatal, logFile);
168+
LogLevel minLogLevel = logToFile switch
169+
{
170+
"error" => LogLevel.Error,
171+
"warn" => LogLevel.Warn,
172+
"info" => LogLevel.Info,
173+
"debug" => LogLevel.Debug,
174+
_ => LogLevel.Info,
175+
};
176+
config.AddRule(minLogLevel, LogLevel.Fatal, logFile);
160177
}
161178
logConsole.Layout = "${longdate} ${level} ${message} ${exception}";
162179

0 commit comments

Comments
 (0)