Создайте файл журнала, названный по имени файла скрипта - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть файл 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

Ответы [ 2 ]

4 голосов
/ 29 апреля 2020

Очень полезно объединить ведение журнала в одном месте. Я научился этому нелегко. Отладка проще, когда события отсортированы по времени, и поточно-ориентированная запись в один и тот же файл. Существуют решения для многопроцессорной регистрации.

Формат журнала может содержать имя модуля, имя функции и даже номер строки, откуда был сделан вызов журнала. Это бесценно. Вы можете найти список атрибутов, которые вы можете автоматически включить в сообщение журнала здесь .

Пример формата:

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.
0 голосов
/ 24 апреля 2020

Вы можете получить имя основного сценария из первого элемента в sys.argv, но если вы хотите, чтобы модуль вызывающего абонента не был основным сценарием, проверьте ответы на этот вопрос .

...