2017-01-30 12 views
0

私はいくつかのロギングを行うユーティリティメソッドを持っています。ロギングで "funcName"を上書きする

ユーティリティメソッドの名前ではなく、ログに呼び出しメソッド名が表示されます。

私はこれを試しました(後で、呼び出し側からinspectモジュールを介して "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 

e?

更新

メソッド名やその他のデータはログフォーマッタを介して出力されます:

logging.Formatter('%(asctime)s %(name)s.%(funcName)s +%(lineno)s: %(levelname)-8s [%(process)d] %(message)s', 
            '%Y-%m-%d %H:%M:%S') 

答えて

0

あなたはさらにloggingメソッドを呼び出します中間のメソッドを追加することができます。

def autolog(message): 
    "Automatically log the current function details." 
    import inspect, logging 
    # Get the previous frame in the stack, otherwise it would 
    # be this function!!! 
    func = inspect.currentframe().f_back.f_code 
    # Dump the message + the name of this function to the log. 
    logging.debug("%s: %s in %s:%i" % (
     message, 
     func.co_name, 
     func.co_filename, 
     func.co_firstlineno 
    )) 
+0

inspectでメソッド名を取得する方法を調べていただきありがとうございます。問題は、ログ出力にこの名前を付けることです(印刷ではなくログを使用して)。 – guettli

+0

ロギングfuncのスニペットを表示できますか?またはinbuiltモジュールを使用していますか? – harshil9968

+0

func-nameはロギングFormater(私たちのコードではありません)経由で出力されます。私は質問を更新しました。私はそれ以上のログ機能のスニペットを表示する意味がないと思う。どう思いますか? – guettli

関連する問題