改进python代码
我面临以下情况: 我设置DEBUG=True/False,并基于此进行日志记录 传统的做法是改进python代码,python,Python,我面临以下情况: 我设置DEBUG=True/False,并基于此进行日志记录 传统的做法是 if DEBUG: logger.log(whatever) 有没有更好的方法来编写此代码?使用闭包/lambda函数等 你想得太多了。您有两行代码,非常清晰和简洁。在不使事情变得更复杂的情况下,要改变这一点,你做不了多少 另一种简单快捷的日志记录方法是将调试检查移动到包装器函数中 def log(msg): if DEBUG: logger.log(msg) 这意味着在记录消息时
if DEBUG:
logger.log(whatever)
有没有更好的方法来编写此代码?使用闭包/lambda函数等 你想得太多了。您有两行代码,非常清晰和简洁。在不使事情变得更复杂的情况下,要改变这一点,你做不了多少 另一种简单快捷的日志记录方法是将调试检查移动到包装器函数中
def log(msg):
if DEBUG:
logger.log(msg)
这意味着在记录消息时,代码的其余部分只有一行。唯一潜在的缺点是,如果您正在构建消息字符串,即使调试为false,也会构建消息字符串。只有当您需要一个高效的程序并且正在构造非常复杂的日志字符串时,这才是真正的问题。请参阅日志库手册: 您可以直接在代码或配置文件中进行配置 e、 g 查看它如何仅显示信息和警告消息 或者,从文件:
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')
有关日志配置格式,请参阅配置部分
logging.getLogger的相关性。。。它允许您为代码的不同部分设置不同的日志级别
编辑:如果您担心昂贵的操作,最好使用以下方法:
if logger.isEnabledFor(logging.DEBUG):
logger.debug('Message with %s, %s', expensive_func1(),
expensive_func2())
Hth
< P>在这个特定的实例中,您可以考虑使用Python的模块,它将处理这个和其他日志记录需要。在其最基本的化身中:# Call once somewhere early in your code
logging.basicConfig(level=DEBUG and logging.DEBUG or logging.INFO)
....
logging.debug(whatever)
需要注意的一点是,“无论什么”都会得到与您的示例不同的评估。。。但是amir75的答案更为完整:-这很好,直到您希望从日志中获得一些额外的功能,例如警告/信息/消息。并非所有日志消息都用于调试。一些是生产中需要的,细粒度配置,文件中的外部化配置,而不是代码,变量替换。。。此外,您可能会引入已经使用日志库的模块。因此,最好使用预烘焙日志库之类的解决方案。。
# Call once somewhere early in your code
logging.basicConfig(level=DEBUG and logging.DEBUG or logging.INFO)
....
logging.debug(whatever)