尝试使用logging.getLogger()获取日志对象实例:All calls to this function with a given name return the same logger instance. This means that logger instances never need to be passed between different parts of an application.
更新:
建议使用getLogger()函数并对其进行配置(设置处理程序、格式化程序等):# main.py
import logging
import lib
def main():
logger = logging.getLogger('custom_logger')
logger.setLevel(logging.INFO)
logger.addHandler(logging.FileHandler('test.log'))
logger.info('logged from main module')
lib.log()
if __name__ == '__main__':
main()
# lib.py
import logging
def log():
logger = logging.getLogger('custom_logger')
logger.info('logged from lib module')
如果您确实需要扩展logger类,请查看logging.setLoggerClass(klass)
更新2:
如何在不更改日志类的情况下添加自定义日志级别的示例:# main.py
import logging
import lib
# Extend Logger class
CUSTOM_LEVEL_NUM = 9
logging.addLevelName(CUSTOM_LEVEL_NUM, 'CUSTOM')
def custom(self, msg, *args, **kwargs):
self._log(CUSTOM_LEVEL_NUM, msg, args, **kwargs)
logging.Logger.custom = custom
# Do global logger instance setup
logger = logging.getLogger('custom_logger')
logger.setLevel(logging.INFO)
logger.addHandler(logging.FileHandler('test.log'))
def main():
logger = logging.getLogger('custom_logger')
logger.custom('logged from main module')
lib.log()
if __name__ == '__main__':
main()
定义一个自定义处理程序并可能使用多个记录器可以满足您的另一个需求:对stderr的可选输出。