- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我有一个 Flask
Docker
内的应用程序正在登录 docker logs
当它在没有 UWSGI
的情况下运行时在前。现在我用了UWSGI
使用下面的配置在 Docker
中运行我的应用程序:
[uwsgi]
master = true
processes = 5
threads = 2
socket = 127.0.0.1:3031
chmod-socket = 664
stats=0.0.0.0:30310
chdir = /etc/fantas
uid = root
gid = root
wsgi-file=uwsgi_fantas.py
callable=app
vacuum = true
uwsgi_fantas.py
文件包含:
from fantas.fantas_app import FantasApp
app = FantasApp().setup()
setup
方法返回 app
:
from flask_restful import Api
from fantas import app
class FantasApp(object):
def setup(self):
api = Api(app)
api.add_resource(Token, '/users')
return app
最后是启动 Flask
的部分框架位于 __init__.py
内在项目的根目录下:
from flask import Flask
import logging
app = Flask(__name__)
s_handler = logging.StreamHandler()
s_handler.setLevel(logging.DEBUG)
app.logger.addHandler(s_handler)
作为 UWSGI
直接使用 app
我在 __init__.py
中配置了记录器的对象,但问题是它没有将任何内容记录到 Docker
当它运行时,它只记录 UWSGI
请求。
app.logger配置过程中出现了什么问题?
问题已解决,但现在日志出现重复!
EDIT-1:我设置app.logger.setLevel(logging.DEBUG)
似乎 Flask
登录 Docker
成功地。奇怪的是它记录了 3 次!我删除了所有记录器配置和处理程序,只使用了:
app.logger.setLevel(logging.DEBUG)
但现在它记录了 2 次:
proj_fantas.1.huagnqqpzo1n@linuxkit-025000000001 | [2018-07-13 07:02:38,008] DEBUG in token: [Token] authenticating user...
proj_fantas.1.huagnqqpzo1n@linuxkit-025000000001 | DEBUG:flask.app:[Token] authenticating user...
为什么会这样?
EDIT-2:
app.logger.handlers
的输出是 [<logging.StreamHandler object at 0x7f0f430ca8d0>]
.它只是显示了我之前初始化的 StreamHandler,仅此而已。
EDIT-3:
ps -ef
的输出Docker
中的命令:
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 15:26 ? 00:00:00 uwsgi uwsgi_coconuty.ini
root 10 1 0 15:26 ? 00:00:00 uwsgi uwsgi_coconuty.ini
root 12 1 0 15:26 ? 00:00:00 uwsgi uwsgi_coconuty.ini
root 13 1 0 15:26 ? 00:00:00 uwsgi uwsgi_coconuty.ini
root 15 1 0 15:26 ? 00:00:00 uwsgi uwsgi_coconuty.ini
root 16 1 0 15:26 ? 00:00:00 uwsgi uwsgi_coconuty.ini
root 20 0 0 15:27 pts/0 00:00:00 /bin/bash
root 112 20 0 15:28 pts/0 00:00:00 ps -ef
Docker
内没有其他进程在运行.
最佳答案
首先,例如,Flask 日志从 0.9 版本初始化到当前稳定的 1.0.2 的方式最近发生了变化。您可以查看 here .我假设您的 docker 镜像使用的是最新版本。
如果是这种情况,即使没有任何自定义日志配置,实际上它也在为您的输出流进行日志记录,但它会过滤掉低于 WARNING 日志(DEBUG 和 INFO)的日志。当您依赖 Flask 为您初始化日志并且您没有设置 --debug 标志(uwsgi 案例)时,就会发生这种情况。
在配置日志记录时可以查看多种策略。一种建议是使用 library itself 中提到的 dictConfig 初始化。 ,在 uwsgi 主机上,在定义应用程序之前,然后 fork 。按照您的示例,在 __init__.py
:
from flask import Flask
from logging.config import dictConfig
dictConfig({
'version': 1,
'formatters': {'default': {
'format': '[%(asctime)s] %(levelname)s in %(module)s: %(message)s',
}},
'handlers': {'wsgi': {
'class': 'logging.StreamHandler',
'formatter': 'default'
}},
'root': {
'level': 'DEBUG',
'handlers': ['wsgi']
}
})
app = Flask(__name__)
你在EDIT-1中提到的问题看起来像一个python logging propagation issue .有一个独立的案例,更容易调试,here .
即使您只设置了一个 Stream Handler,如您的日志所示,它也可能附加了一个父级。如果您检查其父级,它可能会附加一个处理程序不同,与您在 EDIT-2 中提到的处理程序不同:
print logger.handlers
[<logging.StreamHandler object at 0x7f15669c1550>]
print logger.parent.handlers
[<logging.StreamHandler object at 0x7f15669c1610>]
当日志传播被启用并且在其他地方发生了一些日志初始化时会发生这种情况。您可以通过查看 python's source code 中的 callHandlers
来检查传播的工作原理。 :
...
hdlr.handle(record)
if not c.propagate:
c = None #break out
else:
c = c.parent
...
回到你的案例(Flask),通过查看日志中的跟踪,有一个名为 flask.app
的记录器,它是由 Flask itself 创建的记录器.分别有格式化版本和未格式化版本( logging.BASIC_FORMAT )。因此,它可能正在您的代码中的某处或您导入的某个库中被初始化。
有多种方法可以解决这个问题:
关于python - 为什么Flask logger在前面使用UWSGI时不登录docker?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51318988/
我正在尝试为我的用户提供使用 Google 或 Facebook 登录的选项。到目前为止,我找到了一个实现 Google 登录流程的示例,但如果我可以在同一 Activity 中实现类似的 Faceb
我有一个网页,它对用户是否登录很敏感。我使用的是 Google 登录 Javascript SDK。当用户到达此页面时,我想显示一个插页式广告(“正在加载...”),然后 1)如果用户已登录则呈现页面
我用 digitalocean 创建了一个 droplet,并使用 apt install mariadb-server 命令安装了 mariadb。现在我想使用 php 连接到我的服务器,我使用这个
这个问题在这里已经有了答案: Inno Setup - Signing fails with "Sign Tool failed with exit code 0x1" (2 个回答) 3年前关闭。
我正在尝试使用他们的新 API 实现 google 登录:https://developers.google.com/identity/sign-in/web/ 登录和注销工作正常。我的问题是我不知道
我的应用程序具有谷歌登录、Facebook 登录和 braintree 集成。 我已将以下代码放入 appdelegate.swift 中: func application(_ applicatio
我有一个 Flask 应用程序,最近在我的登录/退出表单中实现了 Flask-Login: @account.route('/sign-in', methods=['POST', 'GET']) de
friend 们,我是初学者级别的 ios swift 学习者。我一直在尝试在我的试用应用程序中进行谷歌登录。根据来自谷歌开发人员和其他教程的资源,我成功地使用 UIView 进行了登录。然后我试图在
我正在使用 Ionic 在 Codeigniter/Ion_Auth/codeigniter-restclient 之上构建登录系统,当我尝试从“ionic 服务器”登录时,登录可以正常工作,但对 L
在 Docker 文件中我有这个 FROM ubuntu RUN apt update && apt -y upgrade RUN apt install -y sudo # Setup ops us
对于 Java 开发,我使用 Slf4j 和 Logback。 Logger logger = LoggerFactory.getLogger(HelloWorld.class); logger.de
在 Scala 应用程序中进行日志记录的好方法是什么?与语言哲学一致的东西,不会使代码困惑,并且维护成本低且不引人注目。以下是基本要求列表: 简单 不会使代码困惑。 Scala 以其简洁而著称。我不希
我正在尝试将我的登录名转换为 Retrofit2 我的旧 LoginActivity: public class LoginActivity extends Activity { private st
我正在尝试让 google+ 登录在 android 上运行。我的问题是,每当我使用 eclipse 运行它时,google 开发站点上提供的示例都能完美运行。当我签署 apk 并在我的设备上手动安装
这个问题已经有答案了: JS Simple but Safe Login? [closed] (1 个回答) 已关闭 6 年前。 我正在尝试使用 JavaScript 创建登录页面。它实际上只是一个带
其他章节请看: react 高效高质量搭建后台系统 系列 登录 本篇将完成 登录模块 。效果和 spug 相同: 需求 如下:
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 1 年前。
我在使用 ReactJs 中的 facebook-login 组件时遇到问题,代码与文档中的完全一样,但仍然无法正常工作。你能帮我找出我做错了什么吗? import React, { Componen
我有一个项目,其中包含许多具有自己的日志记录的“工具”类。这些日志文件是在应用程序启动时创建的,但在使用之前一直为空。 是否可以告诉logback在启动时不应该创建空文件?但是仅在使用它们时? 不知何
我正在创建一个需要用户授权才能访问某些功能的网站。我目前正在研究用户如何创建帐户以及如何利用 session 来授权他们的登录。用户信息存储在名为 user 的 MySQL 表中,其中可能包括用户名和
我是一名优秀的程序员,十分优秀!