希望获得答案或至少某种线索,以解决我们的网络服务器遇到的一个奇怪的问题。
作为Web服务器正常活动的一部分,我们将一些关键的交互记录到文件日志中。文件日志没什么特别的,它是一个简单的LogInteraction
函数,封装在DLL中,网络服务器调用该函数来记录这些交互。这是DLL的记录代码:
Private Shared Function Log(messageLog As String, fileName As String) As Boolean
Dim result As Boolean = False
Using streamWriter As StreamWriter = New StreamWriter(fileName, True)
streamWriter.WriteLine(messageLog + Environment.NewLine)
result = True
End Using
Return result
End Function
Public Shared Function LogInteraction(accountName As String, logMessage As String) As Boolean
Dim logName As String = String.Empty
Dim result As Boolean = False
Try
logName = String.Format("{0}_{1}",accountName, DateTime.Now.ToString("yyyyMMdd"))
result = Log(String.Format("{0}, {1}, {2}", DateTime.Now.ToLongTimeString(), accountName, logMessage), logName)
Catch ex As Exception
result = False
LogError("Could not log activity: " + logMessage + Environment.NewLine + ex.ToString())
End Try
Return result
End Function
现在很奇怪的问题是,自从将项目的.NET Framework从3.5升级到4.7以来,我们开始看到一种奇怪的效果-有时Web服务器不会生成文件日志。我们有六个Web服务器为单个客户提供服务,根据负载,尝试访问该网站的用户将被重定向到特定的Web服务器。因此,在糟糕的一天中,超过一半的服务器的日志为零,但是查看IIS日志,我们看到的流量正常,因此,这与负载均衡器的问题并没有因为网络服务器停止获取流量无关。
据我们所知,客户体验不会受到影响。我们尚未收到客户的任何投诉。从他们的角度来看,一切都很好。但是从我们的角度来看,我们看不到任何看起来像随机服务器的日志。
在调查这个奇怪的问题时,我们收集了一些关键数据:
我们目前不知道为什么会发生此问题或说明了什么。我们已经一遍又一遍地遍历了代码,这看起来不像是一个代码问题-同样,该代码在3.5版中也能正常工作。有没有人经历过类似的事情?
谢谢
答案 0 :(得分:0)
问题是代码问题。
在登录文件的DLL中,有一行代码基本上在每次有日志条目时在日志文件路径中添加一个斜线。因此,文件路径将变成类似“ c:\ mylogpath \\\ logfilename.txt”的格式-出人意料地在Windows中可以正常工作。
此文件路径是共享变量,因此不会自然重置(必须重置web.config或回收应用程序池才能使网站自行重置)。对于每个日志条目,logfilename.txt前面的斜杠都会增大,直到文件路径变量达到32767个字符(在Windows 10之前),然后出现“路径太长”异常