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