log4net не работает в службе Windows - PullRequest
7 голосов
/ 29 июня 2010

У меня есть консольное приложение, которое я конвертирую в службу Windows. В качестве консольного приложения моя регистрация в log4net работает нормально. Но, преобразовав его в службу Windows, мой журнал log4net перестал работать.

Я добавил это в свой файл assemblyInfo.cs в сервисном проекте:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)] 

Это мой класс обслуживания с onstart и onstop:

private static log4net.ILog _log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
        private Builder _builder;

        public YCSWebServerService()
        {
            InitializeComponent();
            _builder = new Builder();
        }

        protected override void OnStart(string[] args)
        {
            _log.Info("YCSWebServerService started");
            _builder.Start();
        }

        protected override void OnStop()
        {
            _log.Info("YCSWebServerService stopped");
            _builder.Stop();
        }

У меня есть «определенный» файл конфигурации log4net, добавленный в мой сервисный проект:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

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

  <log4net>
    <root>
      <level value="ALL" />
      <appender-ref ref="EventLogAppender" />
    </root>
    <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
      <threshold value="DEBUG" />
      <applicationName value="Lantic YCS WebServer" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="(%-5level %date{hh}:%date{mm}:%date{ss} [%thread] %logger [%property{NDC}] ) %message %n" />
      </layout>
    </appender>
  </log4net>

</configuration>

Есть идеи или советы?

Ответы [ 4 ]

6 голосов
/ 26 апреля 2012

Вы только что добавили раздел log4net в свой файл app.config?В своем вопросе вы упомянули, что у вас есть «конкретный файл конфигурации log4net», но приведенный вами пример выглядит как все содержимое app.config.Если дело в app.config, то у вас может быть более простая строка в AssemblyInfo.cs:

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

Также добавление requirePermission = "false" в раздел в моем app.config помогло мне, когда я исправил подобную проблемуlog4net не входит в файл для службы Windows (см. дополнительный атрибут - requirePermission = "false"):

<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" requirePermission="false"/>
  </configSections>
1 голос
/ 29 июня 2010

https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=293617

http://social.msdn.microsoft.com/Forums/en-US/windowsgeneraldevelopmentissues/thread/5bef59bc-a28f-4e6d-8ddb-730e12764162

В Windows Vista, Windows XP SP 2, Windows Server 2003, 2008 и Windows 7 пользователю необходимы Права администратора для доступа к журналу безопасности. Теперь, когда log4net пытается создать журнал событий Source , все журналы проверяются, если он уже существует. Таким образом, для службы Windows пользователю Windows Server потребуются права администратора (что не очень хорошо).

Решение: настройте явный источник в конфигурации log4net (как вы это сделали: <applicationName value="Lantic YCS WebServer" />, Lantic YCS WebServer - это ваш источник) и создайте этот источник в своей программе установки (поскольку пользователь-установщик должен иметь права администратора).

1 голос
/ 29 июня 2010

Некоторые вещи попробовать:

Имеет ли пользователь, запускающий службу, разрешения на запись?

Записываются ли какие-либо исключения в журналы Windows?

Вы пытались запустить службу в режиме отладки, чтобы увидеть, является ли Log4net бросать какие-либо исключения?

0 голосов
/ 25 июня 2012

Что ж, этот вопрос задавался давным-давно, у меня есть предложение, которое может быть полезным для тех, кто ищет решение этой проблемы.Если вы конвертируете консольное приложение в службу Windows ... у вас должен быть установлен установщик для установки приложения.Когда вы устанавливаете приложение, оно создает установочную папку для службы, обычно находящуюся в ProgramFile ..... (проверьте, когда вы устанавливаете вашу службу ... она дает вам путь к установочной директории).Если в файле web.config вы указали путь к файлу журнала как «Log \ Log.txt», то в папке установки будет находиться папка (Log) с вашим файлом журнала (Log.txt).Вы тратите время впустую, если вы ищете файл журнала в папке приложения.

...