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")
我在文档中说明“logger”是用户想要自定义日志行为时应使用的对象。那么故意设置预定义格式输出是否合法?
FORMAT = '[%(asctime)] %(message)s'
logging.basicConfig(format=FORMAT)
logger = logging.getLogger('pyftpdlib')
你能想到一个第三方模块,我可以借鉴其中将日志功能公开并作为公共API的部分吗?
先行致谢。
logging.NullHandler
仅在 Python 2.7(和 > 3.2,我想)中可用,这可能是一个问题。如果您只使用logger = logging.getLogger('pyftpdlib')
,则将默认获取消息,并且您可以将用户指向logging.setLevel
和logging.setFormatter
文档以演示如何配置库的输出消息。另外,您可以使用文件配置logging.config.fileConfig
来允许用户配置记录器。 - Chris