Log4net for windows service

12,678

Solution 1

Try This:

 <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 entry of Log4Net in Config Section, Example:

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

In your Logger class have ILog variable and in constructor configure the logger like this:

private ILog log;

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

Solution 2

It may be user privileges problem.

Windows Service often starts with NetworkService credential which has no write privileges.

You can add write and midify privilege for C:\CE folder or use another Appender (like EventLog Appender)

good luck

Share:
12,678
Sanjeev
Author by

Sanjeev

Updated on June 14, 2022

Comments

  • Sanjeev
    Sanjeev almost 2 years

    This is first time I am using Log4net. It doesn't show any errors, but is not writing to file. I added following in 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");
    

    It's not logging.

  • Sanjeev
    Sanjeev almost 11 years
    The issue was with the config file. The project was not reading config file. to solve this, i added [assembly: log4net.Config.XmlConfigurator(ConfigFile = @"fullpath\App.config", Watch = true)] in assembly file. how can i give root path directly in assembly file
  • Abhishek Jain
    Abhishek Jain almost 11 years
    Check this, it will definately going to solve your problem: logging.apache.org/log4net/release/manual/…