尝试使用 logging.getLogger() 来获取您的日志记录对象实例:
http://docs.python.org/3/library/logging.html#logging.getLogger
使用给定名称对该函数的所有调用都返回相同的记录器实例。这意味着记录器实例永远不需要在应用程序的不同部分之间传递。
更新:
推荐的方法是使用 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')
如果您确实需要扩展记录器类,请查看logging.setLoggerClass(klass)
更新 2:
有关如何在不更改 Logging 类的情况下添加自定义日志记录级别的示例:
# 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()
请注意,不建议添加自定义级别:http: //docs.python.org/2/howto/logging.html#custom-levels
定义一个自定义处理程序并可能使用多个记录器可能会满足您的其他要求:可选输出到 stderr。