使用 FtpWebRequest 输出日志 [英] Output log using FtpWebRequest

查看:33
本文介绍了使用 FtpWebRequest 输出日志的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I wonder if it's possible to have output log for my FTP client using FtpWebRequest.

像这样:

[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.

例如,此输出是连接时...

This output for example is when connecting...

我当前的代码仅执行以下操作:

My current code only does the following:

// 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());
}

推荐答案

您可以使用 网络跟踪.要设置,请创建(或修改,如果您已经有) App.config 文件,使其看起来像这样(如果您已经有了该文件,则需要向其中添加设置):

You can do this using Network Tracing. To set it up, create (or modify, if you already have one) App.config file, so that it looks like this (if you already have the file, you will need to add the settings to it):

<?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>

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

If you do this, your application will create a network.log file, that might look something like this:

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 并在配置文件中使用它而不是 TextWriterTraceListener.

It's quite verbose, but it does contain the information you need. If you want to modify how is the log file written, you can implement your own TraceListener and use that in the config file instead of TextWriterTraceListener.

这篇关于使用 FtpWebRequest 输出日志的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆