改进python代码

时间:2011-04-18 21:43:33

标签: python

我面临以下情况:

我设置了DEBUG = True / False,并根据此我进行了日志记录。

传统的做法是

if DEBUG:
   logger.log(whatever)

有没有更好的方法来编写此代码?使用闭包/ lambda函数等。?

3 个答案:

答案 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)

需要注意的一点是,“无论什么”总是得到评估(与你的例子不同)。