【发布时间】:2021-10-16 12:06:16
【问题描述】:
我有两个文件。
首先是 TCP 服务器。
第二个是烧瓶应用程序。它们是一个项目,但它们位于一个单独的 docker 容器内
由于是同一个项目,他们应该写日志相同的文件
我尝试创建我的日志库我将我的日志库导入到两个文件
我尝试了很多事情
首先我删除了下面的代码
if (logger.hasHandlers()):
logger.handlers.clear()
当我删除时,我得到两次相同的日志
我的结构
docker-compose
docker file
loggingLib.py
app.py
tcp.py
requirements.txt
.
.
.
我最后的日志记录代码
from logging.handlers import RotatingFileHandler
from datetime import datetime
import logging
import time
import os, os.path
project_name= "proje_name"
def get_logger():
if not os.path.exists("logs/"):
os.makedirs("logs/")
now = datetime.now()
file_name = now.strftime(project_name + '-%H-%M-%d-%m-%Y.log')
log_handler = RotatingFileHandler('logs/'+file_name,mode='a', maxBytes=10000000, backupCount=50)
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(funcName)s - %(message)s ', '%d-%b-%y %H:%M:%S')
formatter.converter = time.gmtime
log_handler.setFormatter(formatter)
logger = logging.getLogger(__name__)
logger.setLevel(level=logging.INFO)
if (logger.hasHandlers()):
logger.handlers.clear()
logger.addHandler(log_handler)
return logger
它正在工作,但只在一个文件中 如果 app.py 首先工作,它只会生成一个日志 其他文件不做任何日志
【问题讨论】:
-
通常在 Docker 中,您根本不会登录到文件。两个容器都将登录到控制台,您可以使用
docker logs查看日志。如果您使用docker-compose up而不使用-d选项在前台同时启动两个容器,则它们的日志将在控制台上合并。 -
@DavidMaze 无法使用 docker 控制台日志,因为卷溢出。打印 docker 控制台的任何内容都会填充覆盖内存。之后服务器内存中不会有空内存,服务器可以关闭或者无法响应
-
您可以为default Docker JSON File log driver 配置日志轮换。日志不应该消耗内存,只消耗磁盘空间。
-
@DavidMaze 我尝试了一个 docker JSON 文件日志驱动程序的内置示例,但我无法解决,您可以编写一个示例以在 docker-compose.yml 中实现
标签: python docker flask logging tcp