0
が受信したFTPコマンドをログに記録する方法を私はFTPサーバーとしてねじれ使用していますか?ツイストサーバー
が受信したFTPコマンドをログに記録する方法を私はFTPサーバーとしてねじれ使用していますか?ツイストサーバー
FTPRealm
は、ファイルシステムへのアクセスを仲介するためにFTPAnonymousShell
インスタンスとFTPShell
インスタンス(アバター)を作成します。
これらのクラスはどちらもIFTPShell
を実装しています。 1つの解決策は、作成するアバターにロギングラッパーを適用するFTPRealm
のラッパーを作成することです。
from twisted.python.components import proxyForInterface
class WrappingRealm(proxyForInterface(IRealm)):
wrap = staticmethod(logging_wrapper)
def requestAvatar(self, *a, **kw):
d = maybeDeferred(
super(WrappingRealm, self).requestAvatar,
*a, **kw
)
def got_avatar((iface, avatar, logout)):
return (iface, self.wrap(avatar), logout)
d.addCallback(got_avatar)
return d
などlogging_wrapper
何かを実装:あなたがインターフェイスの各メソッドのロギングを追加する必要がありますので、これは少し面倒です
class _LoggingFTPShell(proxyForInterface(IFTPShell)):
def makeDirectory(self, path):
log(avatar=self.avatar, operation="makeDirectory", path=path)
return super(_LoggingFTPShell, self).makeDirectory(path)
# The same for the rest of the methods of IFTPShell
# ...
def logging_wrapper(avatar):
return _LoggingFTPShell(avatar)
を。しかし、TwistedのFTPプロトコルの実装では、必要なロギングを実行するための機能がネイティブに提供されていないので、これを回避するのは難しいです。いくつかのメタプログラミングを使うと、タイピングを省くことができます(ただし、複雑さを犠牲にして)。
この例は役立つでしょうか?あなたが興味を持っているログを追加するために、Twistedにパッチを提供することです。 http://twistedmatrix.com/documents/current/_downloads/ftpclient.py – BoboDarph