我面临以下情况:
我设置了DEBUG = True / False,并根据此我进行了日志记录。
传统的做法是
if DEBUG:
logger.log(whatever)
有没有更好的方法来编写此代码?使用闭包/ lambda函数等。?
答案 0 :(得分:7)
查看日志库的手册:http://docs.python.org/library/logging.html
您可以直接在代码或配置文件中进行配置......
e.g。
import logging
logging.basicConfig(filename='example.log',level=logging.INFO)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
(看看它如何只显示信息和警告信息)
或者,从文件:
import logging
import logging.config
logging.config.fileConfig('logging.conf')
# create logger
logger = logging.getLogger('simpleExample')
# 'application' code
logger.debug('debug message')
logger.info('info message')
logger.warn('warn message')
logger.error('error message')
logger.critical('critical message')
有关日志记录配置格式,请参阅config部分。 http://docs.python.org/howto/logging.html#configuring-logging
logging.getLogger(...)的相关性是它允许您为代码的不同部分设置不同的日志级别。
编辑:如果您担心昂贵的操作,最好使用以下内容:
if logger.isEnabledFor(logging.DEBUG):
logger.debug('Message with %s, %s', expensive_func1(),
expensive_func2())
HTH
答案 1 :(得分:3)
你在想这个。您有2行代码非常简洁明了。在不使事情变得复杂的情况下,你可以做很多事情来改变它。
进行日志记录的唯一其他简短方法是将调试检查移动到包装函数中。
def log(msg):
if DEBUG:
logger.log(msg)
这意味着您的其余代码在记录邮件时只有一行。唯一可能的缺点是,如果要构建消息字符串,即使DEBUG
为false,也会构建消息字符串。如果您需要一个高效的程序并且构建非常复杂的日志字符串,那么这只是一个问题。
答案 2 :(得分:3)
在这个特定的例子中,你可以考虑使用python的logging模块,它将为你处理这个(以及其他日志记录需求)。在其最基本的化身:
# Call once somewhere early in your code
logging.basicConfig(level=DEBUG and logging.DEBUG or logging.INFO)
....
logging.debug(whatever)
需要注意的一点是,“无论什么”总是得到评估(与你的例子不同)。