使用python logger仅将stderr记录到日志文件中

时间:2013-08-27 17:24:00

标签: python

我有一个记录器设置,但我无法弄清楚只有在命令失败或生成stderr时如何记录。

def RunAndLog(self, command, logf)
   p = subprocess.Popen(command, shell=False, 
           stdout=subprocess.PIPE, stderr=subprocess.PIPE)
   (stdout, stderr) = p.communicate()
   logger = logging.getLogger('check rel')
   logger.setLevel(logging.ERROR)
   filehand = logging.handlers.RotatingFileHandler(logFile, mode='a',maxBytes=0,
              backupCount=0, encoding=None, delay=0)
   filehand.setLevel(logging.ERROR)
   lformat = logging.Formatter('%(message)s')
   filehand.setFormatter(lformat)
   logger.addHandler(filehand)
   logger.info(stdout)
   logger.error(stderr)
   logger.removeHandler(filehand)

我正在调用它来列出目录。像,

self.RunAndLog(["dir","%s",pathtodir], "test.log")

test.log包含两种情况的消息,即当目录不存在时以及何时发生...这是一个例子:

#case where dir doesn't exist
dir: /path/to/dir/dir1: No such file or directory

# case where it does
bin lib include src test python doc

如果仅在目录不存在的情况下或仅在test.log命令以非零退出状态失败的情况下,如何将消息记录到dir

...谢谢

1 个答案:

答案 0 :(得分:1)

您的filehandler处理程序正在捕获所有日志消息。您将其级别设置为ERROR,这使得它捕获来自ERROR和up(包括INFO)的所有消息,这就是您记录的每条消息都进入文件的原因。

如果您想要更多控制权,则还必须添加Filter个对象。