使用Log4Net运行应用程序的Windows Service

时间:2016-04-26 15:01:33

标签: c# windows-services console-application log4net

为了移动几个产品的数据,我创建了一个C#控制台应用程序,它使用Log4Net来跟踪进度。 Log4Net在控制台应用程序App.Config文件中配置,目前有两个appender,一个ConsoleAppender和一个RollingLogFileAppender。

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
  <file value="logs\Log.txt" />
  <appendToFile value="true" />
  <rollingStyle value="Size" />
  <maxSizeRollBackups value="10" />
  <maximumFileSize value="10MB" />
  <staticLogFileName value="true" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date %-5level %logger %method - %message%newline%exception" />
  </layout>
</appender>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date %-5level %logger %method - %message%newline%exception" />
  </layout>
</appender>
<root>
  <level value="DEBUG" />
  <appender-ref ref="RollingLogFileAppender" />
  <appender-ref ref="ConsoleAppender" />
</root>

此应用程序及其日志记录在独立运行时正常工作。现在,为了自动运行此控制台应用程序,我正在创建Windows服务以运行控制台应用程序。该应用程序不需要任何用户输入,因此我确实预测了通过该服务运行它时的任何问题。当服务运行时,它成功调用控制台应用程序,我可以看到它的工作结果,但是,日志记录似乎不起作用。被调用的可执行文件位置的日志没有改变,我在我的机器上的其他地方找不到另一个日志实例。该服务作为LocalSystem运行,因此权限不应成为问题。我尝试使用以下设置调用应用程序:

ProcessStartInfo processStartInfo = new ProcessStartInfo(@"C:\Constellation\Dev\Caelum\Caelum\bin\Debug\Caelum.exe");
processStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
processStartInfo.CreateNoWindow = true;
processStartInfo.UseShellExecute = false;
processStartInfo.RedirectStandardError = true;
processStartInfo.RedirectStandardInput = true;
processStartInfo.RedirectStandardOutput = true;

我已尝试使用和不使用输出重定向,但都没有工作。非常感谢任何建议。

2 个答案:

答案 0 :(得分:3)

您的可执行文件可能无法在放置的完全相同的位置执行。我已经在system32文件夹中的某处执行了我的应用程序。

尝试指定绝对路径而不是日志文件的相对路径,以查看是否可以解决问题。

有关类似问题,请参阅here

答案 1 :(得分:0)

您可能需要查看以下内容以验证Windows服务是否正在读取您的App.config。 https://stackoverflow.com/a/14074843/6256551

答案的相关部分在这里:

“如果找不到相应的.exe.config文件,那么服务中的代码可能会回退到默认值。在这种情况下,您可以在服务旁边放置一个正确命名和格式化的配置文件可执行,然后重新启动服务,一切都应该没问题。“