簡體   English   中英

Python日志記錄-如何獲取具有自定義格式化程序的日志消息的值

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

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