从Docker容器中重新定位日志文件后,如何继续写入日志文件?

时间:2018-08-07 18:54:45

标签: python docker logging

我有一个Python脚本,该脚本利用logging模块输出到日志文件。该脚本开始,创建一个Docker容器,然后在Docker容器的功能完成后继续。

我希望日志显示如下:

[Before Docker] script log
[Before Docker] script log
Docker log
Docker log
[After Docker] script log
[After Docker] script log

在构建Docker命令时,我通过使用--mount将日志文件绑定安装到docker run容器中来伪完成此操作。我的问题是,一旦从容器将日志文件返回到主机,记录器的格式就不会保留。

期望/期望的输出:

INFO 2018-08-06 program_name: before message
INFO [DOCKER] 2018-08-06 program_name: Docker message
INFO 2018-08-06 program_name: after message

实际输出(未保留logging格式):

INFO 2018-08-06 program_name: before message
INFO [DOCKER] 2018-08-06 program_name: Docker message
after message

^^^ logging没有标头来指定日志记录级别,日期等。

当脚本在Docker容器之后继续执行时,将日志文件移回原处的操作如下:

# move log file from common space to original directory
mv = 'mv -f {} {}'.format(reference_mapping+'/'+args.log_file, args.log_file)
call(mv, shell=True)

logger = logging.getLogger()
log_handler = logger.handlers[0]
log_file = open(args.log_file, 'a')
stream_handler = logging.StreamHandler(log_file)
logger.addHandler(stream_handler)
logger.removeHandler(log_handler)

logging.basicConfig(
    filename=args.log_file, 
    level=numeric_logging_level, 
    format=frmt, 
    datefmt="%Y-%m-%d %H:%M:%S"
)

我如何设置/处理记录器,以使其在Docker容器之后停滞在Docker容器之后继续运行?

0 个答案:

没有答案