У меня две проблемы:


1:

Я инициализирую свой журнал:

Path(str(Path(__file__).parent.parent.parent.parent) + "\\log").mkdir(parents=True, exist_ok=True)

logging.basicConfig(
    filename=str(Path(__file__).parent.parent.parent.parent) + "\\log\\" + time.strftime(
        "%d.%m.%Y_%H%M%S") + ".log",
    level=logging.DEBUG,
    format="[%(asctime)s ThreadID:%(thread)d %(levelname)s:%(name)s]: %(message)s",
    datefmt="%d.%m.%Y %H:%M:%S"
)
logging.info("Started")

И вызывая его в нескольких случаях:

log = logging.getLogger(__name__)

Проблема в том, что мы используем api, который вызывает ту же функцию, что и выше. Итак, мой файл журнала заполнен тем, что они записывают в свой. Вероятно, это потому, что я использую .basicConfig в начале своей программы, но мне нужно, чтобы он был там.


2:

Я хочу, чтобы файл журнала разделялся и сжимался через определенный интервал. Я знаю, что есть способ через TimedRotatingFileHandler. Об этом уже есть запись. Я пытался использовать второе решение. Но как мне это использовать, как раньше. Потому что теперь я столкнулся с проблемой, что я не могу одновременно сжать файл и записать в него, что имеет смысл, но я не знаю, как это исправить.


Заранее благодарю за ваше время.

0
Zmall 28 Окт 2020 в 21:01

1 ответ

Лучший ответ

К первой части моего вопроса я нашел решение, которое работает без использования logging.basicConfig. Теперь я использую отдельный инициализатор для каждого вызываемого мной экземпляра регистратора. Возможно, он не самый быстрый, но он работает и не хранит нежелательные журналы других модулей.

import logging

handler = logging.FileHandler(str(Path(__file__).parent.parent.parent.parent) + 
          "\\log\\" + time.strftime("%d.%m.%Y_%H%M") + ".log")

formatter = logging.Formatter(fmt="[%(asctime)s ThreadID:%(thread)d %(levelname)s:% 
            (name)s]: %(message)s",datefmt="%d.%m.%Y %H:%M:%S")

handler.setFormatter(formatter)


def init(basicLogger):
     Path(str(Path(__file__).parent.parent.parent.parent) + 
     "\\log").mkdir(parents=True, exist_ok=True) # Checking if path exists if not 
                                                   creates it

     basicLogger.setLevel(logging.DEBUG)
     basicLogger.addHandler(handler)

     return basicLogger

Вы вызываете его в функции, в которую хотите войти, через:

import logging
import # path to the file above

log = init(logging.getLogger(__name__))

log.info("Hello World) # Then you can use the logger like normal
0
Zmall 31 Окт 2020 в 10:25