У меня есть консольное приложение, которое я преобразовываю на службу окон. Как консольное приложение хорошо работает мой вход log4net. Но преобразовывая его на службу окон, мой вход 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>
Какие-либо идеи или подсказки?
Некоторые вещи, которые стоит попробовать:
Есть ли у пользователя, запускающего службу, права на запись?
Регистрируются ли какие-либо исключения в журналах Windows?
Вы пытались запустить службу в режиме отладки, чтобы проверить, работает ли Log4net? генерировать исключения?
https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=293617
В Windows Vista, Windows XP SP 2, Windows Server 2003, 2008 и Windows 7 пользователю необходимы права администратора для доступа к журналу безопасности. Теперь, когда log4net пытается создать журнал событий Источник , все журналы проверяются, если он уже существует. Таким образом, со службой Windows пользователю Windows Server потребуются права администратора (что нехорошо).
Решение: настройте явный источник в конфигурации log4net (как вы это делали:
Lantic YCS WebServer является вашим источником) и создайте этот источник в настройках. (поскольку у Setup-User должны быть права администратора).