我目前正在研究pyftpdlib模块的1.0.0版本.这个新版本将引入一些向后不兼容的更改,因为某些API将不再接受字节而是unicode.虽然我在这里,作为这个breackage的一部分,我正在考虑摆脱我的日志功能,当前使用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
Run Code Online (Sandbox Code Playgroud)
愿意自定义日志的用户(例如将它们写入文件)应该只是覆盖这三个函数,如:
>>> from pyftpdlib import ftpserver
>>>
>>> def log2file(s):
... open('ftpd.log', 'a').write(s)
...
>>> ftpserver.log = ftpserver.logline = ftpserver.logerror = log2file
Run Code Online (Sandbox Code Playgroud)
现在我想知道:取消这种方法并使用日志记录模块意味着什么好处?从模块供应商的角度来看,我应该如何在模块中公开日志功能?我应该这样做:
import logging
logger = logging.getLogger("pyftpdlib")
Run Code Online (Sandbox Code Playgroud)
...并在我的doc中声明"logger"是在用户想要自定义日志行为的情况下应该使用的对象?故意设置预定义的格式输出是否合法:
FORMAT = '[%(asctime)] %(message)s'
logging.basicConfig(format=FORMAT)
logger = logging.getLogger('pyftpdlib')
Run Code Online (Sandbox Code Playgroud)
...?
你能想到第三方模块我可以从日志功能作为公共API的一部分公开和整合的地方获取线索吗?
提前致谢.
这是我用来制作可定制记录器的资源。我没有做太多改变,只是添加了一个 if 语句,并传入是否要登录到文件或只是控制台。
检查一下这个着色器。它非常适合对输出进行着色,因此 DEBUG 看起来与 WARN 不同,而 WARN 看起来与 INFO 不同。
日志记录模块捆绑了许多不错的功能,例如 SMTP 日志记录、文件轮换日志记录(因此您可以保存几个旧的日志文件,但每次出现问题时都不会生成数百个日志文件)。
如果您想迁移到 Python 3,使用日志记录模块将无需更改打印语句。
日志记录非常棒,具体取决于您正在做什么,我之前只是稍微使用过它来查看我在程序中的位置(如果您正在运行此函数,请以这种方式着色),但它比常规的功能要强大得多打印声明。
归档时间: |
|
查看次数: |
2886 次 |
最近记录: |