簡體   English   中英

如何設置日志記錄級別名稱?

[英]How to set logging level names?

為了提高可讀性,我想更改日志系統的級別名稱。 我當前的方法是使用logging.addLevelName() 我也希望記錄器寫入stderr和syslog。 我可以使用以下代碼實現這兩者:

import logging
import logging.handlers

logging.basicConfig(level=logging.DEBUG)
logging.addLevelName(logging.CRITICAL, "(CC)")
logging.addLevelName(logging.ERROR, "(EE)")
logging.addLevelName(logging.WARNING, "(WW)")
logging.addLevelName(logging.INFO, "(II)")
logging.addLevelName(logging.DEBUG, "(DD)")
logging.addLevelName(logging.NOTSET, "(--)")

logger = logging.getLogger('mylogger')
logger.addHandler(logging.handlers.SysLogHandler(address="/dev/log"))
handler = logging.StreamHandler()
handler.setFormatter(logging.Formatter(
    '[%(asctime)s %(levelname)s] %(message)s', datefmt="%y%m%d-%H%M%S"))
logger.addHandler(handler)
logger.propagate = False

logger.debug("debug")
logger.info("info")
logger.warning("warning")
logger.error("error")
logger.critical("critical")

現在終端上的輸出如下所示:

[180303-224014 (DD)] debug
[180303-224014 (II)] info
[180303-224014 (WW)] warning
[180303-224014 (EE)] error
[180303-224014 (CC)] critical

但是不幸的是,syslog-handler現在將所有消息寫入WARNING級別:

Mar  3 22:40:14 user.warning debug 
Mar  3 22:40:14 user.warning info 
Mar  3 22:40:14 user.warning warning 
Mar  3 22:40:14 user.warning error 
Mar  3 22:40:14 user.warning critical

這是Python logging模塊中的錯誤嗎? 是否有更好的方法來僅設置用於'%(levelname)s'的字符串?

它可能會被視為錯誤。 SysLogHandler使用self.priority_map.get(levelName, "warning")來確定發送給syslog的優先級,並且看來addLevelName無法(或可能無法)更新地圖。 解決方法是,您可以手動更新它:

SysLogHandler.priority_names.update({
  '(CC)': logging.LOG_CRIT,
  '(EE)': logging.LOG_ERR,
  # etc
})

暫無
暫無

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

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