为了移动几个产品的数据,我创建了一个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;
我已尝试使用和不使用输出重定向,但都没有工作。非常感谢任何建议。
答案 0 :(得分:3)
您的可执行文件可能无法在放置的完全相同的位置执行。我已经在system32文件夹中的某处执行了我的应用程序。
尝试指定绝对路径而不是日志文件的相对路径,以查看是否可以解决问题。
有关类似问题,请参阅here。
答案 1 :(得分:0)
您可能需要查看以下内容以验证Windows服务是否正在读取您的App.config。 https://stackoverflow.com/a/14074843/6256551
答案的相关部分在这里:
“如果找不到相应的.exe.config文件,那么服务中的代码可能会回退到默认值。在这种情况下,您可以在服务旁边放置一个正确命名和格式化的配置文件可执行,然后重新启动服务,一切都应该没问题。“