現在、 pyftpdlibモジュールの 1.0.0 リリースに取り組んでいます。この新しいリリースでは、特定の API がバイトではなく Unicode を受け入れるようになるという下位互換性のない変更が導入されます。私がそれに取り組んでいる間、この破損の一部として、現在 print ステートメントを使用しているロギング関数を取り除き、代わりにロギング モジュールを使用する可能性を考えていました。
現在、pyftpdlib はロギングを 3 つの関数に委任しています。
def log(s):
"""Log messages intended for the end user."""
print s
def logline(s):
"""Log commands and responses passing through the command channel."""
print s
def logerror(s):
"""Log traceback outputs occurring in case of errors."""
print >> sys.stderr, s
ログをカスタマイズする (たとえば、ログをファイルに書き込む) ことを希望するユーザーは、次のようにこれら 3 つの関数を上書きすることになっています。
>>> from pyftpdlib import ftpserver
>>>
>>> def log2file(s):
... open('ftpd.log', 'a').write(s)
...
>>> ftpserver.log = ftpserver.logline = ftpserver.logerror = log2file
今、私は疑問に思っています:このアプローチを取り除き、代わりにロギングモジュールを使用することにはどのような利点がありますか? モジュール ベンダーの観点から、モジュールでロギング機能を公開するにはどうすればよいですか? 私はこれを行うことになっていますか:
import logging
logger = logging.getLogger("pyftpdlib")
...そして、「ロガー」は、ユーザーがログの動作をカスタマイズしたい場合に使用することになっているオブジェクトであるとドキュメントに記載されていますか? 次のように、事前定義された形式の出力を意図的に設定することは正当ですか?
FORMAT = '[%(asctime)] %(message)s'
logging.basicConfig(format=FORMAT)
logger = logging.getLogger('pyftpdlib')
...?
ロギング機能が公開され、パブリック API の一部として統合されている場所から手がかりを得ることができるサードパーティ モジュールを思いつきますか?
前もって感謝します。