簡體   English   中英

Python記錄奇怪的行為

[英]Python logging strange behavior

考慮以下代碼:

ubuntu_logger = logging.getLogger('ubuntu-logger')

mail_handler = MailHandler()
mail_handler.setLevel(logging.INFO)
ubuntu_logger.addHandler(mail_handler)

filepath = "/home/ubuntu/logs/central.log"
formatter = logging.Formatter('[%(asctime)s - %(name)s - %(levelname)s]: %(message)s')

central_handler = logging.handlers.RotatingFileHandler(
    filename=filepath,
    mode="a+"
)
central_handler.setLevel(logging.DEBUG)
central_handler.setFormatter(formatter)
ubuntu_logger.addHandler(central_handler)

我在自定義python模塊serverutils.logutils創建此處理程序。 然后,將其導入我的守護程序服務腳本中,該腳本由root用戶運行:

from serverutils.logutils import ubuntu_logger as logger, DEFAULT_LOGGING_CONFIG

logger.info('pydaemons launching...')

使用上面的代碼, ubuntu_logger根本不執行任何操作。 在更改了如下所示的代碼之后,除了根記錄器之外, ubuntu_logger預期工作:

import logging
from serverutils.logutils import ubuntu_logger as logger, DEFAULT_LOGGING_CONFIG

config = DEFAULT_LOGGING_CONFIG # Fancy format, log level DEBUG
config.update(filename='/home/ubuntu/test.log')

logging.basicConfig(**config)

logging.error('omg, this works')
logger.info('pydaemons launching...')

我想念什么?

您需要在ubuntu_logger上設置日志級別:

ubuntu_logger.setLevel(logging.DEBUG)

否則,它將在根記錄器上找到默認設置的WARNING級別。 當您運行logging.basicConfig() ,將根記錄器的日志級別設置為DEBUG ,因此ubuntu_logger選中了它,並且不再過濾您的INFO級別日志消息。

當您調用logger.log()幫助函數之一(例如logger.info() )時,通常發生的情況是,記錄器檢查當前級別是否允許該消息。 如果它自己的級別為NOTSET (默認值),則將查詢父日志對象, NOTSET ,直到找到根為止,默認值為WARNING

如果您在特定的記錄器上設置了處理程序,則可能要禁用日志傳播:

ubuntu_logger.propagate = False

否則, 要求根記錄器處理日志消息。 傳播不會影響記錄器開始發出消息的級別。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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