在Python中,如何在不调用函数的情况下将函数名称作为字符串获取?
def my_function():
pass
print get_function_name_as_string(my_function) # my_function is not in quotes
Run Code Online (Sandbox Code Playgroud)
应该输出"my_function".
这样的功能在Python中可用吗?如果没有,get_function_name_as_string在Python中如何实现任何想法?
我正在使用Python日志记录模块,并且想要禁用由我导入的第三方模块打印的日志消息.例如,我正在使用以下内容:
logger = logging.getLogger()
logger.setLevel(level=logging.DEBUG)
fh = logging.StreamHandler()
fh_formatter = logging.Formatter('%(asctime)s %(levelname)s %(lineno)d:%(filename)s(%(process)d) - %(message)s')
fh.setFormatter(fh_formatter)
logger.addHandler(fh)
Run Code Online (Sandbox Code Playgroud)
这会在我执行logger.debug("我的消息!")时打印出我的调试消息,但它也会打印出我导入的任何模块的调试消息(例如请求和许多其他事情).
我想只看到我感兴趣的模块的日志消息.是否可以使日志模块执行此操作?
理想情况下,我希望能够告诉记录器从"ModuleX,ModuleY"打印消息并忽略所有其他消息.
我查看了以下内容,但我不想在每次调用导入函数之前禁用/启用日志记录: logging - 如何忽略导入的模块日志?
我正在使用Logging(import logging)来记录消息.
在1个单独的模块中,我在调试级别记录消息my_logger.debug('msg');
其中一些调试消息来自function_a()和其他来自function_b(); 我希望能够根据它们来自a还是来自b来启用/禁用日志记录;
我猜我必须使用Logging的过滤机制.
有人可以告诉我下面的代码是如何需要检测来做我想要的吗?
import logging
logger= logging.getLogger( "module_name" )
def function_a( ... ):
logger.debug( "a message" )
def function_b( ... ):
logger.debug( "another message" )
if __name__ == "__main__":
logging.basicConfig( stream=sys.stderr, level=logging.DEBUG )
#don't want function_a()'s noise -> ....
#somehow filter-out function_a's logging
function_a()
#don't want function_b()'s noise -> ....
#somehow filter-out function_b's logging
function_b()
Run Code Online (Sandbox Code Playgroud)
如果我将这个简单的例子扩展到每个模块的更多模块和更多的函数,我会关注很多记录器;
我可以将每个模块保持在1个记录器吗?请注意,日志消息是"结构化的",即如果记录它的函数正在进行一些解析工作,它们都包含一个前缀logger.debug("parsing: xxx")- 我能以某种方式用一行来关闭所有"解析"消息(无论发出消息的模块/功能?)