2016-04-26 71 views
0

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

<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

你是如何设置配置的?它是在App.config中还是单独的文件? –

+0

运行服务的帐户是否具有对日志存储位置的写入权限? – wimh

+0

@RB。 Log4Net配置位于App.Config文件中。 –

回答

3

您的可执行文件可能不会在与放置位置完全相同的位置执行。我已经让我的应用程序在system32文件夹的某处执行。

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

有关类似问题,请参阅here

+0

我最近没有检查过,但windows/system32一直以来都是服务进程的默认当前文件夹,所以是的,将完整路径添加到日志文件中。 –

+0

我将日志文件路径更改为绝对路径,并添加了“Directory.SetCurrentDirectory”。 Log4Net现在正确记录。只是将路径更改为绝对路径不起作用。谢谢! –

0

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

答案的相关部分是在这里:

“如果你不能找到相应的.exe.config文件与,则有可能是服务内的代码回落到默认值在此。情况下,你可以在服务可执行文件旁边放置一个正确命名和格式化的配置文件,然后重新启动服务,一切都会好的。“

相关问题