使用 Supervisor 进行 Python 日志记录

n0x*_*xew 4 python logging supervisord

我目前正在使用 Supervisor 来轻松监控和守护一些 python 脚本。但是,主管似乎无法正确登录。我正在执行的脚本就像这样简单:

#!/usr/bin/env python
import pushybullet as pb
import sys, time, logging

# INIT LOGGING
logging.basicConfig(format='%(asctime)s @%(name)s [%(levelname)s]:    %(message)s', level = logging.DEBUG)

if __name__ == '__main__':
    try:
            logging.info('Custom service started')
            while True:
                    #here for the sake of example, actually doing real stuff here
                    time.sleep(2)
    finally:
            logging.info('Custom service stopped')
Run Code Online (Sandbox Code Playgroud)

这是相应的conf文件:

[program:myscript]
directory=/home/pi/Documents/Scripts_py
command=python -u myscript.py
autostart=true
autorestart=true
Run Code Online (Sandbox Code Playgroud)

所以我根据谷歌上的许多研究测试了很多东西。用 print 替换日志行,然后刷新 stdout 确实有效;与启动脚本的 -u 选项相同。但 print 不足以满足我的需求,Python 的日志模块可以。因此,我尝试在每个日志行后刷新,并以无缓冲模式启动脚本,但什么也没有出现!

预先感谢您的任何帮助!

n0x*_*xew 5

感谢佩德罗·罗德里格斯,我找到了。对于像我一样苦苦挣扎的人,我们只需知道您只需创建一个像这样的 fileHandler :

fh = logging.FileHandler('/var/log/supervisor/your_program_name.log') 
Run Code Online (Sandbox Code Playgroud)

并添加到您的程序conf文件中:

stdout_logfile=/var/log/supervisor/%(program_name)s.log 
Run Code Online (Sandbox Code Playgroud)

脚本将写入日志,然后由主管读取,并在 Web 界面上可见。如果您尝试在没有主管的情况下启动脚本,它可能会产生的一个问题是权限被拒绝。