-3

我想在服务器上创建一个日志文件来跟踪所有客户端登录的详细信息。为此我采用了 Web 服务路径

string p2 = System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath + "ServerLog.txt";
public void log(string logData)
    {
        lock (logLock)
        {
            fs = new FileStream(p2, FileMode.OpenOrCreate, FileAccess.Write);
            m_streamWriter = new StreamWriter(fs);
            m_streamWriter.BaseStream.Seek(0, SeekOrigin.End);
            m_streamWriter.WriteLine(" " + logData + "\n");
            m_streamWriter.Flush();
            m_streamWriter.Close();
        }
    }

我已经在 WebService 中编写了上面的代码,并通过创建一个服务对象来访问它。并且能够修改它。但是一旦我的系统创建了该文件并且另一个用户尝试修改它,然后错误显示为:

由于内部错误,服务器无法处理请求。有关错误的更多信息,请在服务器上打开 IncludeExceptionDetailInFaults(来自 ServiceBehaviorAttribute 或来自配置行为)以便将异常信息发送回客户端,或根据 Microsoft .NET Framework 3.0 SDK 文档打开跟踪并检查服务器跟踪日志。

如果服务器中的文件被删除,第二个用户可以继续登录服务器。但除了第二个用户之外的任何人都可以进行日志记录。

4

2 回答 2

1

试试这个代码而不是你的。

using (StreamWriter streamWriter = new StreamWriter(fileName))
{
    streamWriter.WriteLine(" " + logData + "\n");
}
于 2013-04-22T05:15:58.167 回答
0

您需要关闭流并且还可能使用“附加”模式。File.AppendText是满足您需求的方法。

var filename = p2;
using(var streamWriter = File.AppendText(filename))
{
   streamWriter.WriteLine(" " + logData + "\n");
}

旁注:有许多现有的日志记录解决方案 - 请考虑使用它们而不是发明自己的......

于 2013-04-22T05:18:26.830 回答