Python标准日志记录

时间:2015-10-01 14:27:13

标签: python logging

我喜欢使用python日志记录模块,因为它标准化了我的应用程序并且更容易获得指标。我面临的问题是,对于每个应用程序(或file.py),我都会把它放在我的代码之上。

logger = logging.getLogger(__name__)
if not os.path.exists('log'):
    os.makedirs('log')

logName=time.strftime("%Y%m%d.log")    
hdlr = logging.FileHandler('log/%s'%(logName))

logger.setLevel(logging.INFO)
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(funcName)s %(levelname)s - %(message)s')

ch.setFormatter(formatter)
hdlr.setFormatter(formatter)

logger.addHandler(ch)
logger.addHandler(hdlr)

这是乏味且重复的。有一个更好的方法吗? 人们如何使用多个模块登录大型应用程序?

2 个答案:

答案 0 :(得分:0)

看看logging.basicConfig()

如果你将basicConfig()包装在一个函数中,那么你只需导入你的函数并传递特定的args(即log filename format 等级等。)

这将有助于缩小代码并使其更具可扩展性。

例如 -

import logging

def test_logging(filename, format):
    logging.basicConfig(filename=filename, format=format, level=logging.DEBUG)

    # test
    logging.info('Info test...')
    logging.debug('Debug test...')

然后只需将test_logging()功能导入其他程序。

希望这会有所帮助。

答案 1 :(得分:0)

Using logging in multiple modules阅读Logging Cookbook

您需要做的是使用getLogger()函数来获取具有预定义设置的记录器。

import logging
logger = logging.getLogger('some_logger')

您只需在应用程序启动时设置一次这些设置。