2016-04-26 105 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文件與,則有可能是服務內的代碼回落到默認值在此。情況下,你可以在服務可執行文件旁邊放置一個正確命名和格式化的配置文件,然後重新啓動服務,一切都會好的。「

相關問題