首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >uWSGI / Flask / Python日志会在一段时间后停止

uWSGI / Flask / Python日志会在一段时间后停止
EN

Stack Overflow用户
提问于 2015-06-17 17:53:23
回答 3查看 2.5K关注 0票数 18

我有一个使用python记录器的uWSGI / Flask设置。虽然只有一些工人的日志会出现在日志中,但过了一段时间后,这些日志就不会再出现了。我的假设是,当uWSGI重新启动(克隆)工作线程时,日志记录会以某种方式中断。有什么想法吗?

app/server.py

代码语言:javascript
复制
app = Flask(...)
handler = logging.StreamHandler()
app.logger.addHandler(handler)
app.run()

uWSGI:

代码语言:javascript
复制
uwsgi --emperor /etc/uwsgi/apps-enabled/*.ini --die-on-term --uid www-data --gid www-data --logto /var/www/app.com/logs/uwsgi/emperor.log --socket /tmp/uwsgi/emperor.sock --enable-threads --master --single-interpreter --log-reopen --chmod-socket=770

apps-enabled/app-0.ini和apps-enabled/app-1.ini如下所示:

代码语言:javascript
复制
module=server:app
enable-threads=true
single-interpreter=true
master=true
chdir=/var/www/app.com/app
env=APPLICATION_ENVIRONMENT=production
venv=/var/www/app.com/virtualenv

logto=/var/www/app.com/logs/uwsgi/app.com-0.log
log-reopen=true
chmod-socket=770
buffer-size=65535

lazy-apps=true
max-requests=5000
heartbeat=15

for=0 1 2 3 4 5 6 7
socket=/tmp/uwsgi/app.0.%(_).sock
endfor=

processes=8

map-socket=0:1
map-socket=1:2
map-socket=2:3
map-socket=3:4
map-socket=4:5
map=socket=5:6
map=socket=6:7
map=socket=7:8

我也尝试过使用SysLogHandler,也得到了同样的结果。

EN

回答 3

Stack Overflow用户

发布于 2017-10-22 19:09:55

我不确定这对您的情况是否有帮助,但您可以尝试在uWSGI中使用post分叉。

postfork装饰器就是门票。您可以声明多个postfork任务。每个修饰过的函数都将在每个fork()之后依次执行。

代码语言:javascript
复制
@postfork
def init_logging():
    app.logger.addHandler(handler)

或者,您可以在uwsgi.ini中指定lazy-apps=true

有关详细信息,请参阅http://uwsgi-docs.readthedocs.io/en/latest/PythonDecorators.htmlhttp://uwsgi-docs.readthedocs.io/en/latest/articles/TheArtOfGracefulReloading.html

票数 2
EN

Stack Overflow用户

发布于 2017-04-11 06:36:15

我可以肯定地告诉你,重启uwsgi不应该停止日志记录。我有nginx- uwsgi -django服务器,我总是重启我的uwsgi服务器,我的日志从不停止。这是我的ini文件的样子:也许你可以根据这个来调整你的ini文件,看看它是否工作。

代码语言:javascript
复制
1 #mysite_uwsgi.ini
2 [uwsgi]
3 
4 # Django-related settings
5 # the base directory (full path)
6 chdir           = /home/user/bdapps_stage
7 # Django's wsgi file
8 module          = mysite.wsgi:application
9 # the virtualenv (full path)
10 home            = /home/user/.conda/envs/mysite_env/
11 
12 # process-related settings
13 # master
14 master          = true
15 # maximum number of worker processes
16 processes       = 3
17 # maximum number of threads to use
18 # threads
19 # the socket (use the full path to be safe
20 socket          = /home/user/mysite/mysite.sock
21 # ... with appropriate permissions - may be needed
22 chmod-socket    = 666
23 #set the sockets listen queue size
24 #listen
25 # clear environment on exit
26 vacuum          = true

下面是我如何重新启动我的uwsgi

代码语言:javascript
复制
kill -SIGHUP [pid id of your uwsgi master]

请注意,您使用ini文件为uwsgi提供的命令应该只使用一次来启动uwsgi服务器。当您想要重新启动时,我建议您记下uwsgi master的pid,方法是使用

代码语言:javascript
复制
 ps -ef | grep uwsgi 

然后运行上面的kill命令。

票数 0
EN

Stack Overflow用户

发布于 2019-07-12 22:24:46

冒着另一个可能的原因导致日志记录在一段时间后停止。可以将uWSGI设置为删除权限(这是一个好主意)。但是,在使用此事件logto2设置之后:

代码语言:javascript
复制
logto=/var/www/app.com/logs/uwsgi/app.com-0.log
logto2=/var/www/app.com/logs/uwsgi/app.com-normaluser-0.log

希望这能帮助到别人。

0

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30888147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档