2014-10-26 7 views
10

Я использую Serilog в сервисе TopShelf, регистрируясь на консоли и в режиме скользящего файла. При запуске службы в консоли мои сообщения записываются в файл журнала, но когда я устанавливаю службу и запускаю ее, запись не происходит. Есть ли что-то особенное, что мне нужно настроить? Файл записывается в папку двоичных файлов в разделе «. \ Logs \ log- {date} .txt».Serilog в Windows-Service не записывается в файл журнала

С наилучшими пожеланиями Gope

+0

У меня есть только один и тот же вопрос, вы имеете шанс найти решение? – Mike

ответ

2

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

Если это все еще не удастся, то использовать информацию о исключениях, полученную от Serilog's SelfLog, является вашим лучшим выбором.

+0

Привет, Николас, Спасибо за ваш ответ. Служба работает как LocalSytem и имеет полные права для каталога (за исключением особых прав). В настоящее время я использую Log4Net только потому, что он работает в консоли И внутри службы. Как только я изменю класс Logging на SeriLog, он не пишет или даже не создает файл журнала при работе в качестве службы. Все еще в консольном режиме это работает ... o_o Я попробую проверить SelfLog, спасибо за этот совет! – Gope

+3

Я обнаружил, что когда моя служба регистрируется здесь: '', что он заканчивается в 'C: \ Windows \ SysWOW64', который, по-видимому, является текущим каталогом при первом запуске службы. FYI. – gdoten

12

У меня была очень похожая проблема. В моем случае проблема была связана с относительными путями. Мне просто нужно было указать абсолютный путь. Теперь это работает как шарм.

WriteTo.RollingFile(AppDomain.CurrentDomain.BaseDirectory + "\\logs\\log-{Date}.log") 

Надеюсь, это поможет!

+1

В конфигурации '' вы также можете использовать переменные среды, такие как '% TEMP%' в пути, - лог-файлы под '% APPDATA %' или аналогичные могут работать хорошо. –

5

У нас была такая же проблема, это то, что мы нашли:

  • Serilog сконфигурировано для прокатки логах и записи в послед
  • Ddrable журналов был включен.

Симптомы - Никакие файлы журналов не были созданы - не журналы, записанные в послед.

В соответствии с комментарием @ gdoten наши файлы журнала были записаны в \ windows \ syswow64 (служба запущена как localservice), а.
Мы полагаем, что разрешения на эти файлы могут не разрешать чтение файла продолжительной записи, в результате чего журналы не записываются в Seq.

Исправление было для того, чтобы жестко закодировать путь файла и буфера.

1
loggerFactory.AddFile(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Log-{Date}.txt")); 

Попробуйте это, он работал в моем ASP.NET ядро ​​2 запуска приложения как службы Windows