Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用上下文传递键的Python日志记录_Python_Logging_Aop - Fatal编程技术网

使用上下文传递键的Python日志记录

使用上下文传递键的Python日志记录,python,logging,aop,Python,Logging,Aop,我对Python相当陌生。我一直在修改我们现有的python模块,以改进日志记录。我遇到了一个需求,即用需要记录的特定键上下文以及入口和出口点标记每个方法调用和出口。该键应该在根方法处生成,并传递给进一步的方法调用 我对我应该遵循的方法感到困惑。有没有办法在现有方法中动态插入一个额外的参数?接口可能使用AOP或注释 或者我把这个问题改成简短的- 如何将额外的参数传递给后续的方法调用 谢谢 Panks如果所有这些方法都有一个记录器实例,那么您可以让root方法在进入时在记录器上设置上下文,并在退出

我对Python相当陌生。我一直在修改我们现有的python模块,以改进日志记录。我遇到了一个需求,即用需要记录的特定键上下文以及入口和出口点标记每个方法调用和出口。该键应该在根方法处生成,并传递给进一步的方法调用

我对我应该遵循的方法感到困惑。有没有办法在现有方法中动态插入一个额外的参数?接口可能使用AOP或注释

或者我把这个问题改成简短的-

如何将额外的参数传递给后续的方法调用

谢谢
Panks

如果所有这些方法都有一个记录器实例,那么您可以让root方法在进入时在记录器上设置上下文,并在退出时将其删除

@contextlib.contextmanager
def setup_login(logger, context):
    old_name = logger.name
    logger.name = context
    yield
    logger.name = old_name
根方法变为:

def root():
    context = compute_context()
    with setup_login(logger, context):
        # call other methods

我使用了logger.name,但是您可以使用logger的任何其他属性,或者使用任何其他单例来共享全局状态。

谢谢Madjar。我有一个记录器,但每次不同的线程调用一个方法时,它都应该创建一个新的上下文。所以我认为我不能依赖于记录器属性。如果我可以在运行时重载选定的方法并添加额外的参数,我可以在logger formatter中定义上下文键并记录上下文键。只是一个想法。事实上,这在多线程环境中不起作用,除非您使用线程本地全局glocals。添加额外参数的问题是,如果不修改调用方法的代码,我想不出一种简单的方法将其添加到方法的调用中。另一种方法是使用inspect并沿着堆栈向上移动,直到找到上下文键,但黑客攻击越来越多。