使用FtpWebRequest输出日志

我想知道是否有可能使用FtpWebRequest为我的FTP客户端输出日志。

像这样的东西:

 [R] USER xxx [R] 331 Please specify the password. [R] PASS (hidden) [R] 230 Login successful. [R] SYST [R] 215 UNIX Type: L8 [R] FEAT [R] 211-Features: [R] EPRT [R] EPSV [R] MDTM [R] PASV [R] REST STREAM [R] SIZE [R] TVFS [R] 211 End [R] PWD [R] 257 "/" [R] CWD / [R] 250 Directory successfully changed. [R] PWD [R] 257 "/" [R] TYPE A [R] 200 Switching to ASCII mode. [R] PASV [R] 227 Entering Passive Mode (10,232,201,81,141,175) [R] Opening data connection IP: 10.232.201.81 PORT: 36271 [R] LIST -al [R] 150 Here comes the directory listing. [R] 226 Directory send OK. 

例如,这个输出是连接…

我目前的代码只有以下几点:

 // Get the object used to communicate with the server. FtpWebRequest request = (FtpWebRequest)WebRequest.Create(string.Format("ftp://{0}", addrEndPoint)); request.Method = WebRequestMethods.Ftp.ListDirectoryDetails; request.Credentials = new NetworkCredential(_currentConnection.Username, _currentConnection.Password); FtpWebResponse response = (FtpWebResponse)request.GetResponse(); Stream responseStream = response.GetResponseStream(); StreamReader readStream = new StreamReader(responseStream, System.Text.Encoding.UTF8); if (readStream != null) { Console.WriteLine(readStream.ReadToEnd()); } 

您可以使用networking跟踪来执行此操作。 要设置它 ,创build(或修改,如果你已经有一个) App.config文件,所以它看起来像这样(如果你已经有了这个文件,你将需要添加设置):

 <?xml version="1.0" encoding="utf-8" ?> <configuration> <system.diagnostics> <sources> <source name="System.Net" tracemode="protocolonly" maxdatasize="1024"> <listeners> <add name="System.Net"/> </listeners> </source> </sources> <switches> <add name="System.Net" value="Information"/> </switches> <sharedListeners> <add name="System.Net" type="System.Diagnostics.TextWriterTraceListener" initializeData="network.log" /> </sharedListeners> <trace autoflush="true"/> </system.diagnostics> </configuration> 

如果你这样做,你的应用程序将创build一个network.log文件,可能看起来像这样:

 System.Net Information: 1 : [8892] FtpWebRequest#2383799::.ctor(ftp://test/) System.Net Information: 0 : [8892] FtpWebRequest#2383799::GetResponse(Method=LIST.) System.Net Information: 0 : [8892] Current OS installation type is 'Client'. System.Net Information: 0 : [8892] RAS supported: True System.Net Information: 0 : [8892] FtpControlStream#33675143 - Created connection from 192.168.1.1:51833 to 192.168.1.2:21. System.Net Information: 0 : [8892] Associating FtpWebRequest#2383799 with FtpControlStream#33675143 System.Net Information: 0 : [8892] FtpControlStream#33675143 - Received response [220 This is the test FTP server. Authentication required.] System.Net Information: 0 : [8892] FtpControlStream#33675143 - Sending command [USER svick] System.Net Information: 0 : [8892] FtpControlStream#33675143 - Received response [331 Password required for svick] System.Net Information: 0 : [8892] FtpControlStream#33675143 - Sending command [PASS ********] System.Net Information: 0 : [8892] FtpControlStream#33675143 - Received response [230 Logged on] System.Net Information: 0 : [8892] FtpControlStream#33675143 - Sending command [OPTS utf8 on] System.Net Information: 0 : [8892] FtpControlStream#33675143 - Received response [200 UTF8 mode enabled] System.Net Information: 0 : [8892] FtpControlStream#33675143 - Sending command [PWD] System.Net Information: 0 : [8892] FtpControlStream#33675143 - Received response [257 "/" is current directory.] System.Net Information: 0 : [8892] FtpControlStream#33675143 - Sending command [TYPE I] System.Net Information: 0 : [8892] FtpControlStream#33675143 - Received response [200 Type set to I] System.Net Information: 0 : [8892] FtpControlStream#33675143 - Sending command [PASV] System.Net Information: 0 : [8892] FtpControlStream#33675143 - Received response [227 Entering Passive Mode (174,37,88,92,117,98)] System.Net Information: 0 : [8892] FtpControlStream#33675143 - Sending command [LIST] System.Net Information: 0 : [8892] FtpControlStream#33675143 - Received response [150 Connection accepted] System.Net Information: 0 : [8892] FtpControlStream#33675143 - Received response [226 Transfer OK] System.Net Information: 0 : [8892] FtpWebRequest#2383799::(Releasing FTP connection#33675143.) 

这是相当详细的,但它确实包含你需要的信息。 如果您想修改如何编写日志文件,您可以实现自己的TraceListener并在configuration文件中使用它,而不是TextWriterTraceListener

请查看以下链接以供参考。 如果你有IIS 7,那么可以实现你自己的function。

实现IFtpLogProvider接口的Log方法

 using System; using System.IO; using Microsoft.Web.FtpServer; using System.Diagnostics; using System.Diagnostics.Eventing; namespace FtpLogging { public class FtpLogDemo : BaseProvider, IFtpLogProvider { void IFtpLogProvider.Log(FtpLogEntry loggingParameters) { ....... 

参考:
IIS FTP 7.5可扩展性(IFtpLogProvider并将FTP故障logging到事件日志中)
问题写入文件(C#)