Log4net for windows service

只谈情不闲聊 提交于 2019-12-08 01:38:49

问题


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.


回答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();
}



回答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




回答3:


Make sure that user under his credentials you are running your service has write privileges to location where you are trying to save your logs



来源:https://stackoverflow.com/questions/17874999/log4net-for-windows-service

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!