使用Supervisor进行Python日志记录

时间:2016-03-25 16:53:01

标签: python logging supervisord

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

Route::filter('userFilter', function () {
    if (Route::input('name') == 'John') {
        return 'Welcome John.';
    }
});

Route::get('user/{name}', array(
    'before' => 'userFilter',
    function ($name) {
    return 'Hello, you are not John.';
}));

这是相应的conf文件:

#!/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')

所以我根据google上的许多研究测试了很多东西。 通过print替换日志行,然后刷新stdout indeeds工作;与-u选项相同,用于启动脚本。但是打印不足以满足我的需求,Python的日志模块就是。所以我尝试在每个日志行之后刷新,并以无缓冲的mod启动脚本,但什么都没有出现!

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

感谢佩德罗罗德里格斯,我发现了。对于像我这样苦苦挣扎的人,只要知道你只是创建一个这样的文件处理程序:

flex

并添加到您的程序配置文件:

fh = logging.FileHandler('/var/log/supervisor/your_program_name.log') 

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