How to enable / disable logging and file information of files stored in configuration via code?

I have a framework that uses log4net for logging, I know that we can disable or enable the required entry in log4net through the configuration file. I want to develop some class of settings so that the administrator or user can set the registration, etc. What is a class, etc. In log4net, to get the configuration file and change the settings in the configuration file using code? (is there any or should I use .net System.Xml) Any snippets of code?

<?xml version="1.0" encoding="utf-8" ?> <log4net> <root> <level value="ALL" /> <!--<appender-ref ref="LogFileAppender" />--> <!--<appender-ref ref="ConsoleAppender" />--> <appender-ref ref="DEBUG-RollingLogFileAppender" /> <appender-ref ref="Error-RollingLogFileAppender" /> </root> <appender name="LogFileAppender" type="log4net.Appender.FileAppender" > <param name="File" value="log-file.txt" /> <param name="AppendToFile" value="true" /> <layout type="log4net.Layout.PatternLayout"> <param name="Header" value="[Header]\r\n"/> <param name="Footer" value="[Footer]\r\n"/> <param name="ConversionPattern" value="%d [%t] %-5p %c %ndc %P{auth} - %m%n" /> </layout> </appender> <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" > <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="%d [%t] %-5p %c %ndc %P{auth} - %m%n" /> </layout> </appender> <appender name="DEBUG-RollingLogFileAppender" type="log4net.Appender.RollingFileAppender,log4net"> <param name="File" value="..\\logs\\debug" /> <param name="AppendToFile" value="true" /> <param name="StaticLogFileName" value="false" /> <param name="RollingStyle" value="Composite" /> <param name="DatePattern" value=".yyyyMMdd'.log'" /> <param name="MaxSizeRollBackups" value="30" /> <param name="MaximumFileSize" value="5MB" /> <layout type="log4net.Layout.PatternLayout,log4net"> <!--<param name="ConversionPattern" value="%d [%t] %-5p %c %ndc %P{auth} - %m%n" />--> <param name="ConversionPattern" value="%d [%t] %-5p - %m%n" /> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <!--<levelMin value="INFO" />--> <levelMax value="INFO" /> </filter> </appender> <appender name="Error-RollingLogFileAppender" type="log4net.Appender.RollingFileAppender,log4net"> <param name="Threshold" value="WARN"/> <param name="File" value="..\\logs\\errors" /> <param name="AppendToFile" value="true" /> <param name="StaticLogFileName" value="false" /> <param name="RollingStyle" value="Composite" /> <param name="DatePattern" value=".yyyyMMdd'.log'" /> <param name="MaxSizeRollBackups" value="30" /> <param name="MaximumFileSize" value="5MB" /> <layout type="log4net.Layout.PatternLayout,log4net"> <header value="&#13;&#10;" /> <footer value="&#13;&#10;======================================================================" /> <param name="ConversionPattern" value="%d [%t] %-5p - %m%n" /> </layout> </appender> </log4net> 
+5
source share
2 answers

Your question is not entirely clear: are you trying to programmatically change the current configuration or programmatically change the configuration file?

If this is the last, I don’t think you need something from log4net itself - and I would not expect it to provide an API for managing the file. Instead, I would use LINQ to XML (assuming .NET 3.5 or higher), and manipulate it directly. It is quite simple in appearance. Examine the configuration file format, determine what changes you want to make to it, and then write the appropriate code for it. You do not even need to reference log4net for this.

+4
source

it seems you can use peter's answer and add or remove appender

Search:

 var root = ((log4net.Repository.Hierarchy.Hierarchy)LogManager.GetRepository()).Root; foreach (var appender in root.Appenders) Console.WriteLine(appender.Name); 

Delete:

 var root = ((log4net.Repository.Hierarchy.Hierarchy)LogManager.GetRepository()).Root; IAppender removedAppender = null; if (root.Appenders.ToArray().Where(x => x.Name == "GelfUdpAppender").Any()) removedAppender = root.RemoveAppender("GelfUdpAppender"); 

Add:

 FileAppender appender = new FileAppender(); appender.Name = "RollingFileAppender"; appender.File = "Log.log"; appender.AppendToFile = true; PatternLayout layout = new PatternLayout(); layout.ConversionPattern = "%d [%t] %-5p %c [%x] - %m%n"; layout.ActivateOptions(); appender.Layout = layout; appender.ActivateOptions(); var root = ((log4net.Repository.Hierarchy.Hierarchy)LogManager.GetRepository()).Root; root.AddAppender(appender); 
0
source

Source: https://habr.com/ru/post/1313354/


All Articles