写一个日志文件

时间:2011-12-05 15:45:10

标签: c# asp.net logging

我最近遇到了一个问题。我可以在我的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上,我只需要允许写入网络服务?这很奇怪,因为我可以上传文件并且写入已经启用

3 个答案:

答案 0 :(得分:2)

在异常的情况下,您的代码不会关闭日志文件中的流,这肯定是不好的。

您应该在流周围使用using语句,因此在任何情况下都会关闭流并在出现异常情况时将其处理。

正如Chris建议我绝对会选择日志框架,我也会避免在wwwroot文件夹中写入。

ELMAH或NLog或Log4Net是比你现在正在做的任何自定义日志记录更好的替代方案,这些技术/库的最大优点是你可以通过编辑配置文件来改变运行时的行为,无需重建或重新部署任何东西......

我最喜欢的是Log4Net,请查看这些内容,了解如何使用它的简单示例:

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

Log4Net in App object?

答案 1 :(得分:0)

根据服务器的版本(Windows 2008及更高版本),该目录具有针对写入的额外保护。

我强烈建议您查看ELMAH来进行日志记录。它为您提供了许多选项,包括内存或数据库支持,并收集您可能需要的大量其他数据。

此外,为写访问开放各种物理目录位置是一个巨大的安全禁忌。

答案 2 :(得分:0)

在服务器上,Web应用程序是否在具有备用凭据的应用程序池下运行,而不是正常的网络服务帐户?如果您还没有这样做,请尝试启用Auditing以查看用户尝试访问该文件的位置。