Ведение журнала на Python: создание журнала, если оно не существует или открыто, и продолжать вести журнал, если он
Я пишу код, который использует систему logging
python. Идея состоит в том, что если LOG
еще не существует, создайте журнал, но если это произойдет, то получите журнал и возобновите ведение журнала в этом файле. Вот мой код:
import logging
import os
log_filename='Transactions.log')
if os.path.isfile(log_filename)!=True:
LOG = logging.getLogger('log_filename')
LOG.setLevel(logging.DEBUG)
# create file handler which logs even debug messages
fh = logging.FileHandler('log_filename')
fh.setLevel(logging.DEBUG)
# create console handler with a higher log level
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
# create formatter and add it to the handlers
formatter = logging.Formatter('-->%(asctime)s - %(name)s:%(levelname)s - %(message)s')
fh.setFormatter(formatter)
ch.setFormatter(formatter)
# add the handlers to the logger
LOG.addHandler(fh)
LOG.addHandler(ch)
else:
LOG=logging.getLogger()
Я подозреваю, что проблема связана с моим блоком else
но я не знаю, как это исправить. Может ли кто-нибудь пролить свет на эту ситуацию.
Ответы
Ответ 1
Модуль журнала FileHandler
позаботится об этом для вас. Нет необходимости в сложности.
Обработчик принимает необязательный параметр mode
, чтобы указать, начинает ли он записывать или добавлять данные к нему.
Из документов:
class logging.FileHandler(filename, mode='a', encoding=None, delay=False)
Указанный файл открывается и используется как поток для ведения журнала. Если mode
не указан, используется 'a'
.
Ответ 2
Для тех, кто пытался создать новую структуру каталогов, например, logs/mylogfile.log
, как упоминал @mightypile, FileHandler не будет создавать новую структуру каталогов для вас. Я использовал os.makedirs
для обеспечения структуры каталогов.
import os
import logging
log_filename = "logs/output.log"
os.makedirs(os.path.dirname(log_filename), exist_ok=True)
file_handler = logging.FileHandler(output_filename, mode="w", encoding=None, delay=False)
Ответ 3
Когда вы запускаете
LOG = logging.getLogger('log_filename')
в первый раз создается глобальная переменная. Следовательно, вы также можете добавить следующий код к приведенному выше скрипту:
global LOG
if LOG is not None:
print("found logger !")
else:
("no global variable logger found")