簡體   English   中英

為什么此自定義記錄器無法將信息記錄到控制台和文件中?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM