我是python的新手,正在尝试解决日志记录问题。我正在尝试将stdoout和stderr流式传输到日志文件,在使用log时我也手动将条目写入其中...
此外,当我手动记录条目时,控制台上会出现重复的条目,但实际日志文件中只有一个条目。
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的流根本没有出现在日志文件中。