Dot-Net

System.Diagnosis.TextWriterTraceListener 的問題沒有將任何日誌寫入文件系統

  • June 4, 2015

為了解決通過 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>

我在我的開發機器上試了一下,效果很好!我可以輕鬆讀出與 smtp 伺服器的完整通信。但是,在生產環境(在 Windows 2003 Server 的 IIS 6 上執行),它根本不起作用。沒有日誌被寫入文件系統。我的第一個想法是,也許 ASP.NET 工作程序帳戶(網路服務)沒有足夠的權限來寫入指定位置的文件系統。我解決了這個問題,但仍然沒有日誌。其次,我認為也許該文件夾被設置為“只讀”並修復了它。但我仍然沒有寫日誌。

有誰知道問題可能是什麼?或者關於如何解決這個問題的一些建議?提前謝謝!

首先,我會在不向文件系統寫入任何內容的情況下檢查跟踪是否真的有效。也就是說,我只使用正常的 Windows 跟踪。為了查看跟踪輸出,我會使用Windows Sysinternals 的 DebugView。當然,也許你應該改變你的配置文件,我對語法不是很熟悉。

現在,如果兩個環境(開發和生產)一切正常,以便您可以在查看器中查看跟踪消息,那麼問題將更多地集中在文件系統和日誌保存上。

你認為你的日誌文件保存在哪裡?當涉及到生產環境時,它可能是一個不同的位置。我認為在 Windows Server 2003 上,您應該在 WinDir 下的某處查找文件,而不是在 Web 應用程序的文件夾中。

在調試此類問題時,我會將 IIS 帳戶升級為本地/域管理員,以查看問題是否已解決。如果已解決,則此處存在權限問題。

祝你好運!

引用自:https://stackoverflow.com/questions/2154804