Fix the prefix of messages caputured from stderr
Swift caputures both sys.stdout and sys.stderr messages and transfers them to syslog. However, whole of the messages uses the "STDOUT:" prefix, currently. It will be quite confusable for debugging purpose because we cannot make sure whether "Swift didn't caputure stderr" or "Swift captured stderr but didn't show it" when we want to log some stderr messages. This patch enables to allow a new prefix "STDERR:" and use it for sys.stderr. Change-Id: Idf4649e9860b77c3600a5cd0a3e0bd674b31fb4f
This commit is contained in:
parent
09474f28b7
commit
99a3d1a1c5
@ -1062,19 +1062,21 @@ class NullLogger(object):
|
||||
|
||||
class LoggerFileObject(object):
|
||||
|
||||
def __init__(self, logger):
|
||||
def __init__(self, logger, log_type='STDOUT'):
|
||||
self.logger = logger
|
||||
self.log_type = log_type
|
||||
|
||||
def write(self, value):
|
||||
value = value.strip()
|
||||
if value:
|
||||
if 'Connection reset by peer' in value:
|
||||
self.logger.error(_('STDOUT: Connection reset by peer'))
|
||||
self.logger.error(
|
||||
_('%s: Connection reset by peer'), self.log_type)
|
||||
else:
|
||||
self.logger.error(_('STDOUT: %s'), value)
|
||||
self.logger.error(_('%s: %s'), self.log_type, value)
|
||||
|
||||
def writelines(self, values):
|
||||
self.logger.error(_('STDOUT: %s'), '#012'.join(values))
|
||||
self.logger.error(_('%s: %s'), self.log_type, '#012'.join(values))
|
||||
|
||||
def close(self):
|
||||
pass
|
||||
@ -1641,7 +1643,7 @@ def capture_stdio(logger, **kwargs):
|
||||
if kwargs.pop('capture_stdout', True):
|
||||
sys.stdout = LoggerFileObject(logger)
|
||||
if kwargs.pop('capture_stderr', True):
|
||||
sys.stderr = LoggerFileObject(logger)
|
||||
sys.stderr = LoggerFileObject(logger, 'STDERR')
|
||||
|
||||
|
||||
def parse_options(parser=None, once=False, test_args=None):
|
||||
|
@ -1043,54 +1043,58 @@ class TestUtils(unittest.TestCase):
|
||||
handler = logging.StreamHandler(sio)
|
||||
logger = logging.getLogger()
|
||||
logger.addHandler(handler)
|
||||
lfo = utils.LoggerFileObject(logger)
|
||||
lfo_stdout = utils.LoggerFileObject(logger)
|
||||
lfo_stderr = utils.LoggerFileObject(logger)
|
||||
lfo_stderr = utils.LoggerFileObject(logger, 'STDERR')
|
||||
print 'test1'
|
||||
self.assertEquals(sio.getvalue(), '')
|
||||
sys.stdout = lfo
|
||||
sys.stdout = lfo_stdout
|
||||
print 'test2'
|
||||
self.assertEquals(sio.getvalue(), 'STDOUT: test2\n')
|
||||
sys.stderr = lfo
|
||||
sys.stderr = lfo_stderr
|
||||
print >> sys.stderr, 'test4'
|
||||
self.assertEquals(sio.getvalue(), 'STDOUT: test2\nSTDOUT: test4\n')
|
||||
self.assertEquals(sio.getvalue(), 'STDOUT: test2\nSTDERR: test4\n')
|
||||
sys.stdout = orig_stdout
|
||||
print 'test5'
|
||||
self.assertEquals(sio.getvalue(), 'STDOUT: test2\nSTDOUT: test4\n')
|
||||
self.assertEquals(sio.getvalue(), 'STDOUT: test2\nSTDERR: test4\n')
|
||||
print >> sys.stderr, 'test6'
|
||||
self.assertEquals(sio.getvalue(), 'STDOUT: test2\nSTDOUT: test4\n'
|
||||
'STDOUT: test6\n')
|
||||
self.assertEquals(sio.getvalue(), 'STDOUT: test2\nSTDERR: test4\n'
|
||||
'STDERR: test6\n')
|
||||
sys.stderr = orig_stderr
|
||||
print 'test8'
|
||||
self.assertEquals(sio.getvalue(), 'STDOUT: test2\nSTDOUT: test4\n'
|
||||
'STDOUT: test6\n')
|
||||
lfo.writelines(['a', 'b', 'c'])
|
||||
self.assertEquals(sio.getvalue(), 'STDOUT: test2\nSTDOUT: test4\n'
|
||||
'STDOUT: test6\nSTDOUT: a#012b#012c\n')
|
||||
lfo.close()
|
||||
lfo.write('d')
|
||||
self.assertEquals(sio.getvalue(), 'STDOUT: test2\nSTDOUT: test4\n'
|
||||
'STDOUT: test6\nSTDOUT: a#012b#012c\nSTDOUT: d\n')
|
||||
lfo.flush()
|
||||
self.assertEquals(sio.getvalue(), 'STDOUT: test2\nSTDOUT: test4\n'
|
||||
'STDOUT: test6\nSTDOUT: a#012b#012c\nSTDOUT: d\n')
|
||||
got_exc = False
|
||||
try:
|
||||
for line in lfo:
|
||||
pass
|
||||
except Exception:
|
||||
got_exc = True
|
||||
self.assert_(got_exc)
|
||||
got_exc = False
|
||||
try:
|
||||
for line in lfo.xreadlines():
|
||||
pass
|
||||
except Exception:
|
||||
got_exc = True
|
||||
self.assert_(got_exc)
|
||||
self.assertRaises(IOError, lfo.read)
|
||||
self.assertRaises(IOError, lfo.read, 1024)
|
||||
self.assertRaises(IOError, lfo.readline)
|
||||
self.assertRaises(IOError, lfo.readline, 1024)
|
||||
lfo.tell()
|
||||
self.assertEquals(sio.getvalue(), 'STDOUT: test2\nSTDERR: test4\n'
|
||||
'STDERR: test6\n')
|
||||
lfo_stdout.writelines(['a', 'b', 'c'])
|
||||
self.assertEquals(sio.getvalue(), 'STDOUT: test2\nSTDERR: test4\n'
|
||||
'STDERR: test6\nSTDOUT: a#012b#012c\n')
|
||||
lfo_stdout.close()
|
||||
lfo_stderr.close()
|
||||
lfo_stdout.write('d')
|
||||
self.assertEquals(sio.getvalue(), 'STDOUT: test2\nSTDERR: test4\n'
|
||||
'STDERR: test6\nSTDOUT: a#012b#012c\nSTDOUT: d\n')
|
||||
lfo_stdout.flush()
|
||||
self.assertEquals(sio.getvalue(), 'STDOUT: test2\nSTDERR: test4\n'
|
||||
'STDERR: test6\nSTDOUT: a#012b#012c\nSTDOUT: d\n')
|
||||
for lfo in (lfo_stdout, lfo_stderr):
|
||||
got_exc = False
|
||||
try:
|
||||
for line in lfo:
|
||||
pass
|
||||
except Exception:
|
||||
got_exc = True
|
||||
self.assert_(got_exc)
|
||||
got_exc = False
|
||||
try:
|
||||
for line in lfo.xreadlines():
|
||||
pass
|
||||
except Exception:
|
||||
got_exc = True
|
||||
self.assert_(got_exc)
|
||||
self.assertRaises(IOError, lfo.read)
|
||||
self.assertRaises(IOError, lfo.read, 1024)
|
||||
self.assertRaises(IOError, lfo.readline)
|
||||
self.assertRaises(IOError, lfo.readline, 1024)
|
||||
lfo.tell()
|
||||
|
||||
def test_parse_options(self):
|
||||
# Get a file that is definitely on disk
|
||||
|
Loading…
x
Reference in New Issue
Block a user