我目前正在开发pyftpdlib模块的 1.0.0 版本。这个新版本将引入一些向后不兼容的更改,因为某些 API 将不再接受字节,而是接受 unicode。当我这样做时,作为这个破坏的一部分,我正在考虑摆脱我的日志记录功能的可能性,这些功能目前使用打印语句,并使用日志记录模块。
截至目前,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 的一部分公开和整合的地方获取线索吗?
提前致谢。