System.Diagnosis.TextWriterTraceListener没有将任何日志写入文件系统的问题

Tom*_*ter 8 .net asp.net logging system.diagnostics

为了解决通过未发送电子邮件的smtp-server发送电子邮件的问题,我建议使用System.Diagnosis.TextWriterTraceListener启用日志记录,以跟踪与smtp-server的通信以跟踪任何错误.我将以下内容添加到节点下的web.config中:

<system.diagnostics>
      <trace autoflush="true" />
      <sources>
        <source name="System.Net" >
          <listeners>
            <add name="MyTraceFile"/>
          </listeners>
        </source>

        <source name="System.Net.Sockets">
          <listeners>
            <add name="MyTraceFile"/>
          </listeners>
        </source>
      </sources>

      <sharedListeners>
        <add
          name="MyTraceFile"
          type="System.Diagnostics.TextWriterTraceListener"
          initializeData="System.Net.trace.log"                />
      </sharedListeners>

      <switches>
        <add name="System.Net" value="Verbose" />
        <add name="System.Net.Sockets" value="Verbose" />
      </switches>
    </system.diagnostics>
Run Code Online (Sandbox Code Playgroud)

我在我的开发机器上试了一下它工作得很好!我可以轻松地读出与smtp-server的完整通信.但是,在生产环境(在Windows 2003 Server中的IIS 6上运行)中,它根本不起作用.没有日志写入文件系统.我的第一个想法是,ASP.NET工作进程帐户(NETWORK SERVICE)可能没有足够的权限写入指定位置的文件系统.我修好了,但仍然没有记录.其次,我认为文件夹可能设置为"只读"并修复了该文件夹.但我仍然没有写日志.

有谁知道问题可能是什么?或者也许就如何解决这个问题提出一些建议?Thanx提前!

Ron*_*ein 4

首先,我会检查跟踪是否确实有效,而不向文件系统写入任何内容。也就是说,我只使用常规的 Windows 跟踪。为了查看跟踪输出,我将使用Windows Sysinternals 的 DebugView。当然,也许你应该更改你的配置文件,我对语法不太熟悉。

现在,如果两个环境(开发和生产)一切正常,以便您可以在查看器中查看跟踪消息,那么问题更集中在文件系统和日志保存上。

您认为您的日志文件保存在哪里?也许是生产环境不同。我认为在 Windows Server 2003 上,您应该在 WinDir 下的某个位置查找文件,而不是在 Web 应用程序的文件夹中。

当涉及到调试此类问题时,我会将 IIS 帐户升级到本地/域管理员,只是为了看看问题是否得到解决。如果解决了,那么这里存在权限问题。

祝你好运!