我在my_logging.py中定义了一个记录器功能:
def my_logger(name):
print("warn:", name)
logger = logging.getLogger(name)
# Create handlers
c_handler = logging.StreamHandler()
f_handler = logging.FileHandler('logs/demo.log')
c_handler.setLevel(logging.INFO)
f_handler.setLevel(logging.INFO)
# Create formatters and add it to handlers
c_format = logging.Formatter('%(name)s - %(levelname)s - %(message)s')
f_format = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
c_handler.setFormatter(c_format)
f_handler.setFormatter(f_format)
# Add handlers to the logger
logger.addHandler(c_handler)
logger.addHandler(f_handler)
return logger
然后我在test.py中使用它:
import my_logging
logger = my_logging.my_logger(__name__)
logger.info("This is a test!")
它根本不记录日志!我之所以想将记录器放入一个函数中,是因为我希望它可以在使用相同记录配置的多个模块中使用。
这是什么问题?我进行了测试,似乎与处理程序的setLevel()方法有关。 logging.INFO无效。
答案 0 :(得分:0)
在setLevel()的文档中,您可以看到root记录器使用WARRING
级别,并且很可能在处理程序中阻塞了INFO
级别。
您必须为根记录程序设置INFO
级别
logger = logging.getLogger(name)
logger.setLevel(logging.INFO)
如果您还需要DEBUG
条消息,则必须为根记录程序和处理程序设置DEBUG
级。
logger.setLevel(logging.DEBUG)
c_handler.setLevel(logging.DEBUG)
f_handler.setLevel(logging.DEBUG)
为处理程序使用不同级别,您只能在屏幕上或仅向文件发送调试消息。