C# 使用Log4Net运行应用程序的Windows服务
为了移动一些产品的数据,我创建了一个C#控制台应用程序,它使用Log4Net跟踪进度。Log4Net在console apps App.Config文件中配置,目前有两个appender,一个是ConsoleAppender,一个是RollingLogFileAppenderC# 使用Log4Net运行应用程序的Windows服务,c#,windows-services,console-application,log4net,C#,Windows Services,Console Application,Log4net,为了移动一些产品的数据,我创建了一个C#控制台应用程序,它使用Log4Net跟踪进度。Log4Net在console apps App.Config文件中配置,目前有两个appender,一个是ConsoleAppender,一个是RollingLogFileAppender <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> <file value="lo
<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>
我尝试过使用和不使用输出重定向,但都不起作用。非常感谢您的建议。您的可执行文件可能不会在您放置的位置执行。我已经在system32文件夹中的某个地方执行了我的应用程序 请尝试指定日志文件的绝对路径而不是相对路径,以查看这是否解决了问题
有关类似问题,请参阅。您的可执行文件可能不会在放置它的位置执行。我已经在system32文件夹中的某个地方执行了我的应用程序 请尝试指定日志文件的绝对路径而不是相对路径,以查看这是否解决了问题
有关类似问题,请参阅。您可能需要查看以下内容,以验证您的App.config是否已被Windows服务读取 答案的相关部分如下:
如果找不到相应的.exe.config文件,则服务中的代码可能会返回默认值。在这种情况下,您可以在服务可执行文件旁边放置一个正确命名和格式的配置文件,然后重新启动服务,一切正常您可能需要查看以下内容,以验证您的App.config是否已被Windows服务读取 答案的相关部分如下:
如果找不到相应的.exe.config文件,则服务中的代码可能会返回默认值。在这种情况下,您可以在服务可执行文件旁边放置一个正确命名和格式的配置文件,然后重新启动服务,一切正常您是如何设置配置的?它是在App.config中还是在一个单独的文件中?运行服务的帐户是否对日志存储位置具有写入权限?@RB。Log4Net配置在App.Config文件中。@Wimmel我以LocalSystem的形式运行服务,因此它应该对该文件夹具有权限。使用SysInternals“Process Monitor”查看对以“logs\log.txt”结尾的路径进行的任何访问-这将快速突出显示(a)日志文件的位置(如果有)和(b)任何权限问题或类似问题,您如何设置配置?它是在App.config中还是在一个单独的文件中?运行服务的帐户是否对日志存储位置具有写入权限?@RB。Log4Net配置在App.Config文件中。@Wimmel我以LocalSystem的形式运行服务,因此它应该对该文件夹具有权限。使用SysInternals“Process Monitor”查看对以“logs\log.txt”结尾的路径进行的任何访问-这将快速突出显示(a)日志文件的位置(如果有)和(b)任何权限问题或类似问题,我最近都没有检查,但windows/system32始终是服务进程的默认当前文件夹,因此是的,请将完整路径添加到日志文件。我将日志文件路径更改为绝对路径,并添加了
目录.SetCurrentDirectory
。Log4Net现在正在正确记录日志。仅仅将路径更改为绝对路径不起作用。谢谢我最近没有检查,但windows/system32始终是服务进程的默认当前文件夹,因此是的,请将完整路径添加到日志文件。我将日志文件路径更改为绝对路径,并添加了目录。SetCurrentDirectory
。Log4Net现在正在正确记录日志。仅仅将路径更改为绝对路径不起作用。谢谢
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;