【问题标题】:Create log file named after filename of caller script创建以调用者脚本文件名命名的日志文件
【发布时间】:2020-08-07 18:53:04
【问题描述】:

我有一个 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

【问题讨论】:

    标签: python python-3.x logging python-logging


    【解决方案1】:

    将日志记录合并到一个位置非常有帮助。我经过惨痛的教训才学到这个。当事件按时间排序时更容易调试,并且记录到同一个文件是线程安全的。有用于多处理日志记录的解决方案。

    然后,日志格式可以包含模块名称、函数名称,甚至是发出日志调用的行号。这是无价的。您可以找到可以自动包含在日志消息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.
    

    【讨论】:

    【解决方案2】:

    您可以从sys.argv 中的第一项获取主脚本的文件名,但如果您想获取调用者模块而不是主脚本,请查看question 上的答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-02
      • 1970-01-01
      • 1970-01-01
      • 2022-05-31
      相关资源
      最近更新 更多