我正在尝试编写一个可以反复使用的日志记录模块。记录不是问题。我想从任何脚本调用我的日志记录模块,而不必传递日志文件的参数。
如果我有一个名为mytest.py的测试脚本,我将如何在导入日志记录模块中返回此名称。我在日志记录脚本本身尝试了这个,但是它返回了该文件的名称而不是我想要记录的文件。
my_test.py:
from my_logger import logging
info.logging("something here")
print("something here")
if __name__ == "__main__":
logging()
我希望日志文件名为my_test.log,但目前它被命名为logging.log
以下是日志记录脚本中的部分:
def logging(filename=False, level=DEFAULT_LOG_LEVEL):
if filename is False:
file_ext = os.path.basename(__file__) # Need this to be my_test.py
filename = ("C:/Users/Logs/{0}").format(file_ext)
"Start logging with given filename and level."
#print(filename)
logging.basicConfig(filename=filename, level=LEVELS[level])
else:
"Start logging with given filename and level."
logging.basicConfig(filename=filename, level=LEVELS[level])
答案 0 :(得分:1)
假设您的编译器是CPython(感谢Matthew Trevor );
您可以使用inspect.getouterframes获取来电者的信息框,以及文件名和行号等。
import inspect
def logging(filename=False, level=DEFAULT_LOG_LEVEL):
if filename is False:
caller_file = inspect.getouterframes(inspect.currentframe())[1][3]
# prints /home/foo/project/my_test.py
...
答案 1 :(得分:0)
您在__file__
函数中使用的logging
绑定将保存其范围内的文件的值。您需要传入调用模块的__file__
以获取所需的行为:
# my_test.py
...
if __name__ == "__main__":
logging(__file__)
我很惊讶您的日志文件名为logging.log
而不是my_logger.log
,因为这是定义logging
函数的文件的名称。