打印功能输出到Syslog?

时间:2011-09-03 06:01:22

标签: python logging syslog

我想这样做,以便“check_call()”的“stdout”和“stderr”输出发送到Syslog。这可能吗?

代码:

def command(cmd, err=None, ifexit=False):
    try:
        check_call(shlex.split(cmd), stdout=null, stderr=null)

    except CalledProcessError:
        if err != None:
            print err

        if ifexit == True:
            exit(1)

1 个答案:

答案 0 :(得分:2)

是的,这是可能的,但我认为您需要使用Popen代替check_call,并将流程“stdoutstderr发送到正确配置的记录器。 这样的记录器将使用logging.handlers.SysLogHandler向您的syslog服务器发送消息。以下是如何创建此类记录器的简短示例:

import logging

handler = logging.handlers.SysLogHandler()
logger = logging.getLogger('myApplication')
logger.setLevel(logging.DEBUG)
logger.addHandler(handler)

以下是如何使用check_call替换Popen并将数据发送到记录器的示例:

process = Popen(shlex.split(cmd), stdout=PIPE, stderr=PIPE)
# Popen.wait() waits for the command to complete and 
# returns the command's return code
if process.wait() != 0:
    print "AN ERROR OCCURED"
logger.error(process.stderr)
logger.info(process.stdout)