0

好的,所以我正在尝试为在 ASP.net 和 C# 上运行的网站提供错误日志文件。

我尝试使用常规路径存储驱动器。期待它,因为它在 c# 代码(页面后面的代码)中,它将获取服务器并将其存储在那里。(最后它是在服务器上执行的代码)

对我来说不幸的是那不是真的。它保存在客户端打开站点的本地计算机上。

你怎么能强制它保存在服务器机器上?

我希望将所有错误日志放在一个地方。关于阅读或如何做到这一点的任何建议。

   string path = "C:\\WebSite";
   string error = "error";          
   try
    {
      // check if dir exists if it does i add file name to the path
      // i removed code to keep it simple
      path += "\\logs.txt";

      FileStream log_fs = 
              new FileStream(path, FileMode.Append, FileAccess.Write);
      StreamWriter log_sw = 
              new StreamWriter(log_fs);
      string log = String.Empty;

      // formate log string using error message

      log_sw.Write(log);
      log_sw.Close();
      log_fs.Close();
   }
   catch (Exception ex)
   {
        // here I e-mail the error in case logging failed
   }

此代码将在本地机器上生成文件,而不是在服务器上

4

2 回答 2

0

您可以使用如下代码登录到 Web 服务器上的任何位置(ASPNET 用户帐户有权写入):

string log = String.Empty;

// format log string using error message

try
{
    using (StreamWriter logFile = new StreamWriter(@"C:\WebSite\logs.txt", true))
    {
        logFile.WriteLine(log);
    }
}
catch
{
    // here I e-mail the error in case logging failed
}

这会将文件写入托管该网站的 Web 服务器。现在,如果您在开发过程中在本地运行网站并且使用内置的 VS 网络服务器或 IIS,那么在本地测试网站时当然会在您的计算机上创建该文件。

于 2009-07-09T16:32:16.303 回答
0

要回答您问题的建议部分,您是否考虑过使用ELMAH,它会将错误记录到不同的存储中:

Microsoft SQL Server Oracle (OracleErrorLog) SQLite(版本 3)数据库文件 Microsoft Access (AccessErrorLog) VistaDB (VistaDBErrorLog) 松散的 XML 文件 RAM(内存中)

或通过电子邮件、推特发送

elmah 非常易于设置且非常有效

于 2009-07-09T19:55:42.230 回答