[英]Python Logging Handler
我想使用ContextFiltering將用戶定義的變量添加到記錄器格式。 我的代碼如下:
import logging
import logging.handlers
CMDID='TEST'
class ContextFilter(logging.Filter):
def filter(self,record):
record.CMDID=CMDID
return True
FORMAT='%(asctime)s [%(CMDID)s] - %(message)s'
logger=logging.getLogger("Test")
fh=logger.handlers.RotatingFileHandler("testing.log",maxBytes=1024,backupCount=5)
fh.setlevel(logging.DEBUG)
fh.setFormatter(logging.Formatter(FORMAT))
logger.addHandler(fh)
logger.addFilter(ContextFilter())
logger.warning("WTH")
當我不使用文件處理程序並只使用basicConfig進行格式化時,代碼工作正常。 但是在添加旋轉文件處理程序時,我收到錯誤
Traceback (most recent call last):
Line 16, in <module>
fh=logger.handlers.RotatingFileHandler("testing.log",maxBytes=1024,backupCount=5)
AttributeError: 'list' object has no attribute 'RotatingFileHandler'
現在我也嘗試過使用LoggerAdapters類,但它也會引發奇怪的錯誤,在進一步調查中我發現它的文檔可能存在一些問題。
任何人都可以幫我解決這個問題,並建議我使用這個FileHandler在我的記錄器中有效地添加上下文用戶定義的信息。
PS我已經嘗試過python doc中給出的方法沒有用
更改logger.handlers.
到logging.handlers.
並提防打字錯誤(沒有setlevel
-method,但是setLevel
-method)。
以下代碼工作正常:
import logging
import logging.handlers
CMDID='TEST'
class ContextFilter(logging.Filter):
def filter(self,record):
record.CMDID=CMDID
return True
FORMAT='%(asctime)s [%(CMDID)s] - %(message)s'
logger=logging.getLogger("Test")
logger=logging.setLevel(logging.DEBUG)
fh=logging.handlers.RotatingFileHandler("testing.log",maxBytes=1024,backupCount=5)
fh.setLevel(logging.DEBUG)
fh.setFormatter(logging.Formatter(FORMAT))
logger.addHandler(fh)
logger.addFilter(ContextFilter())
logger.warning("WTH")
說明:logger-instance( logger
)可能有多個處理程序,可通過它的logger.handlers
atrribute訪問。 但是,您希望首先實例化一個處理程序(通過logging.handlers.RotatingFileHandler()
)並將此處理程序( fh
)與您的記錄器( logger.addHandler
)一起使用。 這樣做,你的logger-instance現在知道了這個處理程序:
In [4]: logger.handlers
Out[4]: [<logging.handlers.RotatingFileHandler at 0x3e85b70>]
這與這個問題並不完全相關,但是想要加入像我這樣的總noobs,因為這是我搜索問題時的最佳結果。
你可以解決這個問題的另一個原因是你
import logging.handlers
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.