Log4net for Windows service

This is the first time I use Log4net . It does not show any errors, but is not written to the file. I added the following to my AppConfig file:

 <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" requirePermission="false"/> </configSections> <log4net> <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%5level [%thread] (%file:%line) - %message%newline"/> </layout> </appender> <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender"> <file value="C:\CE\FileControllerLog.txt"/> <layout type="log4net.Layout.PatternLayout"> <!--<param name="ConversionPattern" value="%d [%t] %-5p %c %m%n"/>--> <param name="ConversionPattern" value="%d %m%n"/> </layout> <appendToFile value="true"/> <rollingStyle value="Composite"/> <maxSizeRollBackups value="2"/> <maximumFileSize value="10MB"/> <staticLogFileName value="true"/> </appender> <logger name="FileControllerLog"> <level value="INFO"/> <appender-ref ref="LogFileAppender" /> <appender-ref ref="ConsoleAppender"/> </logger> 
 [assembly: log4net.Config.XmlConfigurator(Watch = true)] //added in assembly info file 

and in code:

 ILog logger = log4net.LogManager.GetLogger("FileControllerLog"); logger.Info("Method starts"); 

He is not registered.

+2
source share
3 answers

Try the following:

  <log4net> <root> <level value="Error" /> <appender-ref ref="RollingLogFileAppender" /> </root> <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> <file value="<FilePath>" /> <appendToFile value="true" /> <rollingStyle value="Composite" /> <maxSizeRollBackups value="14" /> <countDirection value="1" /> <maximumFileSize value="4096KB" /> <lockingModel type="log4net.Appender.FileAppender.MinimalLock" /> <staticLogFileName value="true" /> <PreserveLogFileNameExtension value="true" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%newlineDate[%date] ThreadID[%thread] Level[%-5level] Logger[%logger]] - %message%newline" /> </layout> </appender> </log4net> 

In addition to this, there should be a Log4Net entry in the configuration section, an example:

 <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/> </configSections> </configuration> 

There is an ILog variable in your Logger class, and in the constructor, configure the logger as follows:

 private ILog log; public Log4NetLogger() { log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); log4net.Config.XmlConfigurator.Configure(); } 
+5
source

This may be a user rights issue.

A Windows service often starts with NetworkService credentials that do not have write privileges.

You can add write and midify privileges to the C: \ CE folder or use another Appender (e.g. EventLog Appender)

luck

+1
source

Make sure that the user who is under his credentials, the service is running, has the rights to write to the place where you are trying to save your logs

0
source

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


All Articles