0
我有一個實用的方法來做一些記錄。在記錄中覆蓋「funcName」
我想查看日誌中的調用方法名稱,而不是實用程序方法的名稱。
爲了測試我嘗試了這個(後來我想通過檢查模塊從調用者那裏得到「bar」)。
def helper(...):
logger.info('foo', extra=dict(funcName='bar'))
但是,這並不工作:
File "/usr/lib/python2.7/logging/__init__.py", line 1167, in info
self._log(INFO, msg, args, **kwargs)
File "/usr/lib/python2.7/logging/__init__.py", line 1285, in _log
record = self.makeRecord(self.name, level, fn, lno, msg, args, exc_info, func, extra)
File "/usr/lib/python2.7/logging/__init__.py", line 1263, in makeRecord
raise KeyError("Attempt to overwrite %r in LogRecord" % key)
KeyError: "Attempt to overwrite 'funcName' in LogRecord"
這裏是輸出(如果我不嘗試在 「額外」 通過):
2017-01-30 15:00:24 loghelper.helper
我想看到呼叫者:
2017-01-30 15:00:24 calling_module.calling_method
這怎麼可能è?
更新
的方法名稱和其它數據被經由日誌記錄格式化器輸出:
logging.Formatter('%(asctime)s %(name)s.%(funcName)s +%(lineno)s: %(levelname)-8s [%(process)d] %(message)s',
'%Y-%m-%d %H:%M:%S')
感謝您調查如何通過檢查獲取方法名稱。問題是關於把這個名字寫入日誌輸出(通過日誌記錄,而不是通過打印)。 – guettli
你可以顯示日誌功能的代碼片段嗎?或者你在使用內置模塊? – harshil9968
func-name通過記錄Formater(不在我們的代碼中)輸出。我更新了這個問題。我認爲它不再顯示日誌功能的片段。你怎麼看? – guettli