| # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| """ Error and information logging for IDL """ |
| |
| # |
| # IDL Log |
| # |
| # And IDLLog object provides a mechanism for capturing logging output |
| # and/or sending out via a file handle (usually stdout or stderr). |
| # |
| import sys |
| |
| |
| class IDLLog(object): |
| def __init__(self, name, out): |
| if name: |
| self.name = '%s : ' % name |
| else: |
| self.name = '' |
| |
| self.out = out |
| self.capture = False |
| self.console = True |
| self.log = [] |
| |
| def Log(self, msg): |
| line = "%s\n" % (msg) |
| if self.console: self.out.write(line) |
| if self.capture: |
| self.log.append(msg) |
| |
| def LogTag(self, msg): |
| line = "%s%s\n" % (self.name, msg) |
| if self.console: self.out.write(line) |
| if self.capture: |
| self.log.append(msg) |
| |
| def LogLine(self, filename, lineno, pos, msg): |
| line = "%s(%d) : %s%s\n" % (filename, lineno, self.name, msg) |
| if self.console: self.out.write(line) |
| if self.capture: self.log.append(msg) |
| |
| def SetConsole(self, enable, out = None): |
| self.console = enable |
| if out: self.out = out |
| |
| def SetCapture(self, enable): |
| self.capture = enable |
| |
| def DrainLog(self): |
| out = self.log |
| self.log = [] |
| return out |
| |
| ErrOut = IDLLog('Error', sys.stderr) |
| WarnOut = IDLLog('Warning', sys.stdout) |
| InfoOut = IDLLog('', sys.stdout) |