15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)""" Error and information logging for IDL """ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import sys 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class IDLLog(object): 11a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) """Captures and routes logging output. 12a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 13a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) Caputres logging output and/or sends out via a file handle, typically 14a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) stdout or stderr. 15a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) """ 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def __init__(self, name, out): 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if name: 18a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self._name = '%s : ' % name 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else: 20a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self._name = '' 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self._out = out 23a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self._capture = False 24a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self._console = True 25a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self._log = [] 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def Log(self, msg): 28a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if self._console: 29a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) line = "%s\n" % (msg) 30a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self._out.write(line) 31a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if self._capture: 32a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self._log.append(msg) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def LogLine(self, filename, lineno, pos, msg): 35a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if self._console: 36a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) line = "%s(%d) : %s%s\n" % (filename, lineno, self._name, msg) 37a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self._out.write(line) 38a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if self._capture: 39a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self._log.append(msg) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 41a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) def SetConsole(self, enable): 42a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self._console = enable 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def SetCapture(self, enable): 45a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self._capture = enable 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def DrainLog(self): 48a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) out = self._log 49a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self._log = [] 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return out 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ErrOut = IDLLog('Error', sys.stderr) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WarnOut = IDLLog('Warning', sys.stdout) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)InfoOut = IDLLog('', sys.stdout) 55