创建以调用者脚本的文件名命名的日志文件
Create log file named after filename of caller script
我有一个 logger.py
初始化日志记录的文件。
import logging
logger = logging.getLogger(__name__)
def logger_init():
import os
import inspect
global logger
logger.setLevel(logging.DEBUG)
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
logger.addHandler(ch)
fh = logging.FileHandler(os.getcwd() + os.path.basename(__file__) + ".log")
fh.setLevel(level=logging.DEBUG)
logger.addHandler(fh)
return None
logger_init()
我有另一个调用记录器的脚本 caller.py
。
from logger import *
logger.info("test log")
将创建一个名为 logger.log
的日志文件,其中包含记录的消息。
我想要的是以调用者脚本文件名命名的日志文件的名称。因此,在这种情况下,创建的日志文件的名称应改为 caller.log
。
我正在使用 python 3.7
您可以从sys.argv
中的第一项中获取主脚本的文件名,但如果您想获取调用者模块而不是主脚本,请查看此question中的答案。
将日志记录整合到一个位置非常有帮助。我经过惨痛的教训才学到这个。当事件按时间排序时更容易调试,并且记录到同一文件是线程安全的。有用于多处理日志记录的解决方案。
然后,日志格式可以包含进行日志调用的模块名称、函数名称甚至行号。这是无价的。您可以找到可以自动包含在日志消息中的属性列表 here。
示例格式:
format='[%(asctime)s] [%(module)s.%(funcName)s] [%(levelname)s] %(message)s
示例日志消息
[2019-04-03 12:29:48,351] [caller.work_func] [INFO] Completed task 1.
我有一个 logger.py
初始化日志记录的文件。
import logging
logger = logging.getLogger(__name__)
def logger_init():
import os
import inspect
global logger
logger.setLevel(logging.DEBUG)
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
logger.addHandler(ch)
fh = logging.FileHandler(os.getcwd() + os.path.basename(__file__) + ".log")
fh.setLevel(level=logging.DEBUG)
logger.addHandler(fh)
return None
logger_init()
我有另一个调用记录器的脚本 caller.py
。
from logger import *
logger.info("test log")
将创建一个名为 logger.log
的日志文件,其中包含记录的消息。
我想要的是以调用者脚本文件名命名的日志文件的名称。因此,在这种情况下,创建的日志文件的名称应改为 caller.log
。
我正在使用 python 3.7
您可以从sys.argv
中的第一项中获取主脚本的文件名,但如果您想获取调用者模块而不是主脚本,请查看此question中的答案。
将日志记录整合到一个位置非常有帮助。我经过惨痛的教训才学到这个。当事件按时间排序时更容易调试,并且记录到同一文件是线程安全的。有用于多处理日志记录的解决方案。
然后,日志格式可以包含进行日志调用的模块名称、函数名称甚至行号。这是无价的。您可以找到可以自动包含在日志消息中的属性列表 here。
示例格式:
format='[%(asctime)s] [%(module)s.%(funcName)s] [%(levelname)s] %(message)s
示例日志消息
[2019-04-03 12:29:48,351] [caller.work_func] [INFO] Completed task 1.