Я новичок в python и пытаюсь решить проблему с журналированием.Я пытаюсь передать поток stdoout и stderr в файл журнала, в который я также вручную записываю записи при использовании журнала ...
Кроме того, я получаю дублирующиеся записи на консоли, но только одну записьв самом файле журнала, когда я вручную регистрирую записи.
import os
import datetime
from subprocess import call
import sys
import logging
currDir = os.path.dirname(os.path.abspath(__file__))
today_key = datetime.datetime.now().strftime("%Y%m%d%H%M")
log_file = os.path.join(currDir, "logs", 'stream_'+today_key)+".log"
log_formatter = logging.Formatter('%(asctime)s — %(name)s — %(levelname)s — %(funcName)s:%(lineno)d — %(message)s')
pStart = datetime.datetime.now()
def get_stdout_handler():
stdout_handler = logging.StreamHandler(sys.stdout)
stdout_handler.setFormatter(log_formatter)
return stdout_handler
def get_stderr_handler():
stderr_handler = logging.StreamHandler(sys.stderr)
stderr_handler.setFormatter(log_formatter)
return stderr_handler
def get_file_handler():
file_handler = logging.FileHandler(log_file, 'a')
file_handler.setFormatter(log_formatter)
return file_handler
def get_logger(logger_name):
log = logging.getLogger(logger_name)
log.setLevel(logging.DEBUG)
log.addHandler(get_stdout_handler())
log.addHandler(get_stderr_handler())
log.addHandler(get_file_handler())
log.propagate = False
log.hasHandlers = True
return log
def restore_db():
call(["ping", "google.com"])
logger = get_logger(__name__)
if __name__ == '__main__':
logger.info('-----------------------------------')
logger.info('process start')
restore_db()
logger.info('process end')
logger.info('total processing time (%s)',(datetime.datetime.now() - pStart))
logger.info('-----------------------------------')
Поток из ping вообще не отображается в файле журнала.