C# 写一个日志文件
我最近有个问题。我可以在我的intetpub/wwwroot/文件夹中上载文件 但我不能在同一个文件夹中写入日志文件 我拥有网络服务的所有权限。一切都在我的服务器上C# 写一个日志文件,c#,asp.net,logging,C#,Asp.net,Logging,我最近有个问题。我可以在我的intetpub/wwwroot/文件夹中上载文件 但我不能在同一个文件夹中写入日志文件 我拥有网络服务的所有权限。一切都在我的服务器上 DirectoryInfo di = new DirectoryInfo(~/); // Get a reference to each file in that directory. FileInfo[] fiArr = di.GetFiles(); string strLogText = di; // Create a
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上,我只需要允许写入网络服务?这很奇怪,因为我可以上传文件,并且已经启用了写入功能,这取决于服务器的版本(windows 2008及更高版本),该目录具有额外的写入保护 我强烈建议您查看以进行日志记录。它为您提供了许多选项,包括内存或数据库备份,并收集了许多您可能需要的额外数据
此外,为写访问打开各种物理目录位置是一个巨大的安全禁忌。如果出现异常,您的代码不会关闭日志文件上的流,这肯定是不好的 您应该在流周围使用
using
语句,以便在任何情况下关闭流,并在异常情况下处理流
正如Chris所建议的,我绝对会选择一个日志框架,而且我也会避免在wwwroot
文件夹中编写
ELMAH、NLog或Log4Net是好的、简单的替代方案,比您现在正在做的任何自定义日志记录都要好得多,这些技术/库的最大优点是,您只需编辑配置文件即可在运行时更改行为,无需重建或重新部署任何内容
我最喜欢的实际上是Log4Net,请查看下面的示例,了解如何使用它:
在服务器上,web应用程序是否在具有备用凭据的应用程序池下运行,而不是在普通网络服务帐户下运行?如果您还没有这样做,请尝试打开以查看哪些用户正在尝试访问该文件。在这种情况下定义“不能”。你怎么试?是密码吗?显示代码。你有错误吗?显示错误。我编辑了我的第一篇文章。我确信你有理由实现自己的日志记录。然而,您可能想查看log4net——您的服务器上是否有专门连接日志文件的东西?