创建以调用者脚本的文件名命名的日志文件

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.