我有一个使用python记录器的uWSGI / Flask设置。虽然只有一些工人的日志会出现在日志中,但过了一段时间后,这些日志就不会再出现了。我的假设是,当uWSGI重新启动(克隆)工作线程时,日志记录会以某种方式中断。有什么想法吗?
app/server.py
app = Flask(...)
handler = logging.StreamHandler()
app.logger.addHandler(handler)
app.run()
uWSGI:
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如下所示:
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
,也得到了同样的结果。
发布于 2017-10-22 19:09:55
我不确定这对您的情况是否有帮助,但您可以尝试在uWSGI中使用post分叉。
postfork
装饰器就是门票。您可以声明多个postfork任务。每个修饰过的函数都将在每个fork()
之后依次执行。
@postfork
def init_logging():
app.logger.addHandler(handler)
或者,您可以在uwsgi.ini
中指定lazy-apps=true
。
有关详细信息,请参阅http://uwsgi-docs.readthedocs.io/en/latest/PythonDecorators.html和http://uwsgi-docs.readthedocs.io/en/latest/articles/TheArtOfGracefulReloading.html
发布于 2017-04-11 06:36:15
我可以肯定地告诉你,重启uwsgi不应该停止日志记录。我有nginx- uwsgi -django服务器,我总是重启我的uwsgi服务器,我的日志从不停止。这是我的ini文件的样子:也许你可以根据这个来调整你的ini文件,看看它是否工作。
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
kill -SIGHUP [pid id of your uwsgi master]
请注意,您使用ini文件为uwsgi提供的命令应该只使用一次来启动uwsgi服务器。当您想要重新启动时,我建议您记下uwsgi master的pid,方法是使用
ps -ef | grep uwsgi
然后运行上面的kill命令。
发布于 2019-07-12 22:24:46
冒着另一个可能的原因导致日志记录在一段时间后停止。可以将uWSGI设置为删除权限(这是一个好主意)。但是,在使用此事件logto2
设置之后:
logto=/var/www/app.com/logs/uwsgi/app.com-0.log
logto2=/var/www/app.com/logs/uwsgi/app.com-normaluser-0.log
希望这能帮助到别人。
https://stackoverflow.com/questions/30888147
复制相似问题