📜 ⬆️ ⬇️

We connect log4net. Step-by-step instruction

Oddly enough, but it turned out that step-by-step instructions for such a popular library as log4net are not yet available on Habré. I correct this flaw.

We connect Nuget-package


Right-click on References and select Manage Nuget Packages:

image

In the search box, type log4net and find the package (in the output in the first place):

image
')
Click the “Install” button and after installing the package close the window.

Create a class handler.


Add a new class:

image

And call it Logger:

image

Add the following code:

public static class Logger { private static ILog log = LogManager.GetLogger("LOGGER"); public static ILog Log { get { return log; } } public static void InitLogger() { XmlConfigurator.Configure(); } } 

Do not forget to put a link to the assembly at the beginning of the file:

 using log4net; using log4net.Config; 

Configuring the config


Now go to config. In the configuration file App.config (or Web.config - if you have this web application), inside the configuration section, add the log4net section with the following contents:

  <log4net> <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender"> <param name="File" value="Logs\Example.log"/> <param name="AppendToFile" value="true"/> <maxSizeRollBackups value="10"/> <maximumFileSize value="5MB"/> <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="%d %-5p %m%n"/> </layout> </appender> <logger name="LOGGER"> <appender-ref ref="LogFileAppender"/> </logger> </log4net> 

And immediately after the configuration section there should be a section configSections, if it is not there, add (it should be first) and add the code for log4net inside it. If she is alone, she should look like this:

  <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net, Version=1.2.15.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a" /> </configSections> 

Fully my config looks like this:

 <?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net, Version=1.2.15.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a" /> </configSections> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> <log4net> <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender"> <param name="File" value="Logs\Example.log"/> <param name="AppendToFile" value="true"/> <maxSizeRollBackups value="10"/> <maximumFileSize value="5MB"/> <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="%d %-5p %m%n"/> </layout> </appender> <logger name="LOGGER"> <appender-ref ref="LogFileAppender"/> </logger> </log4net> </configuration> 

As you can see the name of the logger:

 <logger name="LOGGER"> 

Same as the name we specified in the Logger class:

 private static ILog log = LogManager.GetLogger("LOGGER"); 

This name is used to associate the config with the code of the handler class. Already, our logger is ready for work, just add the following code:

 Logger.InitLogger();// -      Logger.Log.Info(" !"); 

After launch, the Logs folder will be created and inside will be the Example.log file with a log entry:

 2016-09-21 10:59:41,104 INFO  ! 

Using


Let's change the logging logic a bit. Let us single out the Error level and higher entries into a separate file (for example, we have quite a lot of debug entries and it is inconvenient to read spam). To do this, add the following to the config:

 <appender name="ErrorFile" type="log4net.Appender.RollingFileAppender"> <file value="Logs\Equifax_SenderError.log"/> <appendToFile value="true"/> <maximumFileSize value="5MB"/> <maxSizeRollBackups value="10"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%level %thread %logger - %message%newline"/> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <levelMin value="ERROR"/> <levelMax value="FATAL"/> </filter> </appender> 

B add a link to the appender:

  <logger name="LOGGER"> <appender-ref ref="LogFileAppender"/> <appender-ref ref="ErrorFile"/> </logger> 

Now the log4net section looks like this:

 <log4net> <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender"> <param name="File" value="Logs\Example.log"/> <param name="AppendToFile" value="true"/> <maxSizeRollBackups value="10"/> <maximumFileSize value="5MB"/> <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="%d %-5p %m%n"/> </layout> </appender> <appender name="ErrorFile" type="log4net.Appender.RollingFileAppender"> <file value="Logs\ExampleError.log"/> <appendToFile value="true"/> <maximumFileSize value="5MB"/> <maxSizeRollBackups value="10"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%d %level %thread %logger - %message%newline"/> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <levelMin value="ERROR"/> <levelMax value="FATAL"/> </filter> </appender> <logger name="LOGGER"> <appender-ref ref="LogFileAppender"/> <appender-ref ref="ErrorFile"/> </logger> </log4net> 

And if we change the program code to:

  Logger.InitLogger();// -      Logger.Log.Info(" !"); Logger.Log.Error(" !"); 

Then we will see that another ExampleError.log file has appeared - only errors will be displayed in it:

 2016-09-21 11:14:58,933 ERROR 8 LOGGER -  ! 

Well, for details, refer to the official documentation . Thanks for attention!

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


All Articles