Docker : logs gone 中的 Python 日志记录类

标签 python docker

多年来,我一直以相同的方式使用 Python 的日志记录类:

def get_module_logger(mod_name):
    """
    To use this, do logger = get_module_logger(__name__)
    """
    logger = logging.getLogger(mod_name)
    handler = logging.StreamHandler()
    formatter = logging.Formatter(
        '%(asctime)s [%(name)-12s] %(levelname)-8s %(message)s')
    handler.setFormatter(formatter)
    logger.addHandler(handler)
    logger.setLevel(logging.DEBUG)
    return logger

然后在某个模块中,

logger = get_module_logger(__name__)

现在,我正在运行一个在 Docker 容器内使用它的 Python 应用程序。我正在使用 -d -i -t 运行容器。当我在 docker exec -it containername/bin/bash 之后进入容器时,如果我在生成日志的 python 脚本中执行命令,我可以看到日志。但是,从外部看,docker logs containername 从未显示任何内容。我已经尝试根据一些网络帖子使用 PYTHONUNBUFFERED=0 运行我的容器,但这也没有帮助。使用 docker logs -f containername 拖尾也从不显示任何内容。所以我所有的日志,stderr 和 stdout 都是空的。我也尝试过 logging.StreamHandler(sys.stdout) 但无济于事。

怎么了?我需要更改处理程序中的某些内容吗?

编辑:我的 Dockerfile 非常简单:

FROM python:3.5.1
MAINTAINER tommy@...
ADD . /tmp

#need pip > 8 to have internal pypi repo in requirements.txt
RUN pip install --upgrade pip 
#do the install
RUN pip install /tmp/py/

CMD myservice 

编辑2:

~ docker --version
Docker version 1.11.0, build 4dc5990

最佳答案

我能够看到日志输出,但无法用您的代码重现您的问题。

我创建了一个名为 tommy.py 的文件:

import logging

def get_module_logger(mod_name):
    """
    To use this, do logger = get_module_logger(__name__)
    """
    logger = logging.getLogger(mod_name)
    handler = logging.StreamHandler()
    formatter = logging.Formatter(
        '%(asctime)s [%(name)-12s] %(levelname)-8s %(message)s')
    handler.setFormatter(formatter)
    logger.addHandler(handler)
    logger.setLevel(logging.DEBUG)
    return logger

if __name__ == "__main__":
    get_module_logger(__name__).info("HELLO WORLD!")

运行以下命令:

docker run -d -v /tmp/tommy.py:/opt/tommy.py python:3.5 python /opt/tommy.py

看到这个:

$ docker logs -f sleepy_poincare 
2016-08-30 17:01:36,026 [__main__    ] INFO     HELLO WORLD!

编辑:
这是我的 Docker 版本:

$ docker --version
Docker version 1.12.0, build 8eab29e

关于Docker : logs gone 中的 Python 日志记录类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39226846/

相关文章:

python - 重复变化

ubuntu - Zookeeper 或 Marathon docker 容器使用 100% CPU

docker - cAdvisor prometheus 集成将 container_cpu_load_average_10s 返回为 0

javascript - 我正在获取/bin/sh : [npm: not found error while executing the react image in Docker

python - 如何在 python 中有条件地对列表的元素求和?

python - 安装 Django 时出错

python - 破坏性堆栈迭代

azure - 无法在azure应用程序服务中安装卷?

Docker 容器发布的端口无法访问?

python - Pygame-让子弹朝光标方向射击