Попытка сохранить журналы (распечатанные на консоль и сохраненные в файл с помощью регистратора) из функций в переменных для потоковой передачи их в веб-службу.
Python 3.4.7
from contextlib import redirect_stdout
import sys, io, logging
def log_config(logfile, mode):
FileFormatter = logging.Formatter(
"%(asctime)s [%(funcName)-12.12s] [%(levelname)-8.8s] %(message)s")
ConsoleFormatter = logging.Formatter("[%(asctime)s] : %(message)s")
logger = logging.getLogger()
logger.setLevel(logging.INFO)
consoleHandler = logging.StreamHandler(sys.stdout)
consoleHandler.setFormatter(ConsoleFormatter)
fileHandler = logging.FileHandler(logfile, mode='w')
fileHandler.setFormatter(FileFormatter)
if mode == 'console':
logger.addHandler(consoleHandler)
elif mode == 'file':
logger.addHandler(fileHandler)
elif mode == 'both':
logger.addHandler(fileHandler)
logger.addHandler(consoleHandler)
return logger
step_comment_io = io.StringIO()
logger = log_config('test.log', 'both')
with redirect_stdout(step_comment_io):
print ('printing')
# would like the below line also to be in stdout
logger.info('logging')
step_comment_io.getvalue()
Ожидаемый результат:
печать \ nlogging \ п '
Фактический объем производства:
печать \ п '