Python标准日志

Python标准日志,python,logging,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'%(

我喜欢使用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)
这是乏味和重复的。有更好的方法吗? 人们如何为具有多个模块的大型应用程序登录

看一看

如果将
basicConfig()
包装在函数中,则只需导入函数并传递特定的参数(即日志文件名、格式、级别等)

这将有助于压缩代码,使其更具可扩展性

例如—

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\u logging()
函数导入其他程序

希望这能有所帮助。

请阅读

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

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

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

为什么要在每个文件中都设置这些设置?我现在创建了一个名为“mylogging.py”的文件,然后执行“导入mylogging”,我就是这么想的。。为什么不将所有共享代码推送到一个文件中,然后调用来自不同的文件,如果可能的话,将该类继承到一边:不要将记录器创建为模块全局变量,而是将它们保存在函数内部的本地变量。请参阅“不要在模块级别获取记录器”部分。