将WebSite的项目从.NET Framework 3.5升级到4.7后,有时WebServer文件日志有时会丢失

时间:2019-06-27 15:35:49

标签: .net vb.net logging .net-3.5 .net-4.7

希望获得答案或至少某种线索,以解决我们的网络服务器遇到的一个奇怪的问题。

作为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和9没有日志。在星期二,服务器2、7和10都没有;
  • .NET Framework 3.5中从来没有这个问题;
  • 虽然记录此事件的DLL确实发生了变化(必须重新编译,因为我们从3.5更改为4.7),但代码没有变化;
  • 重置/回收应用程序池神奇地解决了该问题或导致了该问题(我们在午夜时分不久有了一个自动的作业回收应用程序池,并注意到该问题在该确切时间出现或消失了)

我们目前不知道为什么会发生此问题或说明了什么。我们已经一遍又一遍地遍历了代码,这看起来不像是一个代码问题-同样,该代码在3.5版中也能正常工作。有没有人经历过类似的事情?

谢谢

1 个答案:

答案 0 :(得分:0)

问题是代码问题。

在登录文件的DLL中,有一行代码基本上在每次有日志条目时在日志文件路径中添加一个斜线。因此,文件路径将变成类似“ c:\ mylogpath \\\ logfilename.txt”的格式-出人意料地在Windows中可以正常工作。

此文件路径是共享变量,因此不会自然重置(必须重置web.config或回收应用程序池才能使网站自行重置)。对于每个日志条目,logfilename.txt前面的斜杠都会增大,直到文件路径变量达到32767个字符(在Windows 10之前),然后出现“路径太长”异常