2011-12-05 104 views
1

我有一個最近的問題。我可以在我的intetpub/wwwrooot /文件夾寫一個日誌文件

上傳文件,但我不能在這同一個文件夾寫入日誌文件...

我對網絡業務的所有權限。一切都在我的服務器上。

DirectoryInfo di = new DirectoryInfo(~/); 

// Get a reference to each file in that directory. 
FileInfo[] fiArr = di.GetFiles(); 


string strLogText = di; 

// Create a writer and open the file: 
StreamWriter log; 

if (!System.IO.File.Exists("C:\\inetpub\\wwwroot\\logfile.txt")) 
{ 
    log = new StreamWriter("C:\\inetpub\\wwwroot\\logfile.txt"); 
} 
else 
{ 
    log = System.IO.File.AppendText("C:\\inetpub\\wwwroot\\logfile.txt"); 
} 

// Write to the file: 
log.WriteLine(DateTime.Now); 
log.WriteLine(strLogText); 
log.WriteLine(); 

// Close the stream: 
log.Close(); 

錯誤是訪問被拒絕!

它在本地工作,但在我的服務器上它沒有。在文件夾Inetpub上,我只需要允許寫入網絡服務?這很奇怪,因爲我可以上傳文件和寫入已經啓用

+5

在這種情況下定義「不能」。你怎麼試試?它在代碼中嗎?顯示代碼。你有錯誤嗎?顯示錯誤。 – David

+1

我編輯了我的第一篇文章。 – Kiwimoisi

+0

我相信你有理由實施自己的日誌記錄。但是,您可能想要查看log4net - http://logging.apache.org/log4net/ –

回答

2

在異常情況下模擬您的代碼不會關閉日誌文件中的流,這當然不好。

您應該在流周圍使用using聲明,因此在任何情況下,流都會關閉並在出現異常時處理。

正如Chris所建議的,我絕對會選擇一個日誌框架,並且我也會避免寫入wwwroot文件夾。

ELMAH或NLog或Log4Net是比現在正在進行的任何自定義日誌記錄更好的簡單備選方案,這些技術/庫的巨大優勢在於,只需編輯配置文件即可在運行時更改行爲,無需重建或重新部署什麼...

我最喜歡的其實是log4net的,檢查這些的關於如何使用它的一個簡單的例子:

http://logging.apache.org/log4net/release/manual/configuration.html

Log4Net in App object?

0

根據您的服務器的版本(Windows 2008及以上版本),該目錄有額外的防止寫入。

我強烈建議你看看ELMAH做你的日誌記錄。它提供了許多選項,包括內存或數據庫支持,並收集您可能需要的大量附加數據。

此外,爲寫入訪問打開各種物理目錄位置是巨大的安全禁止。

0

在服務器上,在應用程序池下運行的Web應用程序是否具有備用憑據,而不是正常的網絡服務帳戶?如果您還沒有這樣做,請嘗試打開Auditing以查看用戶正在嘗試訪問該文件。