[英]Python logging - How to get value of logging message that has a custom formatter
我有一個記錄器,已經在其中添加了使用自定義格式化程序的處理程序,但是在通過自定義格式化程序后,我想訪問生成的消息。 所以我的代碼看起來像這樣:
import logging
logger = logging.getLogger(__name__)
some_handler = logging.StreamHandler()
some_handler.setFormatter(some_formatter) # some_formatter specified elsewhere
logger.addHandler(some_handler)
現在,當我執行logger.warning('hello')
,我看到的消息具有我在some_formatter
指定的格式(所以也許類似'my message is: hello'
)。 但是我想在代碼中訪問該格式化的消息。 如何從代碼中的logger.info('hello')
中得到格式化后的消息內容?
默認日志記錄級別為WARNING
,這是logger.info('hello')
的原因,因為INFO
的嚴重性不及WARNING
。 只需在以下位置添加以下內容:
logger.setLevel(logging.INFO)
這會將最低記錄的嚴重性級別設置為INFO
。
至於您的問題,您將需要另一個處理程序。 您可以定義自己的Handler
或使用將流設置為StringIO
來創建另一個StreamHandler
:
import logging
from io import StringIO
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
stream = StringIO()
some_handler = logging.StreamHandler()
some_handler.setFormatter(some_formatter)
some_other_handler = logging.StreamHandler(stream)
some_other_handler.setFormatter(some_formatter)
logger.addHandler(some_handler)
logger.addHandler(some_other_handler)
# You hadn't specified your desired result format, so... I'm going to assume you want a list and assume all logs are single lined, but you can change it accordingly
def get_stream():
stream.seek(0)
return stream.read().strip().split('\n')
logger.warning("opps")
logger.info("nevermind")
current_streamed = get_stream()
print(current_streamed)
輸出:
format: opps
format: nevermind
['format: opps', 'format: nevermind']
前兩個來自日志記錄,列表來自current_streamed
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.