我有一个记录器设置,但我无法弄清楚只有在命令失败或生成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
?
...谢谢
答案 0 :(得分:1)
您的filehandler
处理程序正在捕获所有日志消息。您将其级别设置为ERROR,这使得它捕获来自ERROR和up(包括INFO)的所有消息,这就是您记录的每条消息都进入文件的原因。
如果您想要更多控制权,则还必须添加Filter个对象。