首页 > 解决方案 > 不同的日志:local VS docker (local) vs docker SWARM

问题描述

经过一些特定步骤后,我在我的应用程序中记录了一些信息,这些是 3 种不同环境中的结果:

LOCAL
[2020-07-31 08:38:46 -0400] [4810] [INFO] validation
[2020-07-31 08:38:51 -0400] [4810] [INFO] valid

DOCKER LOCAL
[2020-07-30 20:38:55 +0000] [8] [INFO] validation
INFO:app.main:validation
[2020-07-30 20:38:59 +0000] [8] [INFO] valid
INFO:app.main:valid

DOCKER SWARM
[2020-07-27 14:13:08 +0000] [9] [INFO] validation
INFO:app.main:validation
[2020-07-27 14:13:08 +0000] [9] [INFO] valid
INFO:app.main:valid
[2020-07-27 14:13:09 +0000] [9] [INFO] validation
INFO:app.main:validation
[2020-07-27 14:13:09 +0000] [9] [INFO] valid
INFO:app.main:valid

如您所见,当我在本地环境中运行应用程序时,它会正确记录,但在 Docker 中时,它会复制所有内容。

Docker env 的交易是什么?

标签: pythondockerlogging

解决方案


从额外消息的格式来看,例如INFO:app.main:validation,它看起来好像logging.basicConfig()在 Docker 环境中调用了某些东西。这可能是显式的,也可能是通过对 eglogging.info()或类似的调用而隐式的。这是使用 REPL 的示例:

$ python3
Python 3.7.3 (default, Dec 20 2019, 18:57:59) 
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import logging
>>> logging.basicConfig(level=logging.INFO)
>>> logging.getLogger('app.main').info('validation')
INFO:app.main:validation
>>> 

所以,在你的代码中寻找一个调用,logging.info()或者一个logging.basicConfig()只有在 Dockerized 时才会发生的调用。


推荐阅读