簡體   English   中英

Python日志處理程序

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

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