[英]Why doesn't this custom logger log info to console and file?
我在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無效。
在doc中的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)
使用不同級別的處理程序,您只能在屏幕上或僅向文件發送調試消息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.