Log4net со службой Windows - PullRequest
1 голос
/ 27 июня 2011

Я пытаюсь заставить log4net работать для службы Windows.Он отлично работает для консольного приложения.

Я создал пустой сервис, и единственное, что он должен сделать, это записать в файл инструкцию log.

Это мой основной метод.

log4net.Config.XmlConfigurator.Configure();
log4net.ILog log = log4net.LogManager.GetLogger(typeof(Program));

log.Info("Test");

ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
    new Service1() 
};
ServiceBase.Run(ServicesToRun);

Это мой файл app.config:

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

<log4net>
  <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
    <file value="Test.log" />
    <appendToFile value="true" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="10" />
    <maximumFileSize value="1MB" />
    <staticLogFileName value="true" />
    <layout type="log4net.Layout.SimpleLayout" />
  </appender>

  <root>
    <level value="ALL" />
    <appender-ref ref="RollingFileAppender" />
  </root>
</log4net>
</configuration>

Я также добавил эту строку в свой файл AssemblyInfo.cs:

[assembly: log4net.Config.XmlConfigurator(Watch = true)]

Согласнодля всего, что я читал в Интернете, этого должно быть достаточно, чтобы создать файл журнала в каталоге, откуда установлена ​​служба.Когда этого не произошло, я попытался поместить абсолютные каталоги как

log4net.Config.XmlConfigurator.Configure(new FileInfo("C:\\Users\\Public\\app.config"));

и

<file value="C:\Users\Public\Test.log" />

Это тоже не сработало.Я подумал, может быть, это какая-то сумасшедшая проблема с разрешениями, поскольку служба работает под потенциально ограниченной учетной записью, но я только что попытался запустить ее как администратор, а файл все еще не создан.

Что я делаю неправильноздесь

Ответы [ 2 ]

1 голос
/ 26 октября 2011

Это оказалось проблемой с зависимостью от моего проекта установки. Установщик не устанавливал обновленный проект каждый раз, поэтому изменения были применены, но не установлены.

0 голосов
/ 27 июня 2011

Я полагаю, что ваш сервис не может записать в путь, который вы настраиваете.Попробуйте использовать какой-то выделенный каталог журналов и убедитесь, что у службы достаточно прав для записи в этот каталог.

Если ваши настройки находятся в файле app.config, этого достаточно для его настройки:

[assembly: log4net.Config.XmlConfigurator(Watch = true)]
...