@@ -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