Starrynet-specific logger Enable each starrynet .py file to with one import: from starrynet.log import [lg, info, error] ...get a default logger that doesn't require one newline per logging call. Inherit from object to ensure that we have at least one new-style
| 73 | |
| 74 | |
| 75 | class StarrynetLogger(Logger, object): |
| 76 | """Starrynet-specific logger |
| 77 | Enable each starrynet .py file to with one import: |
| 78 | |
| 79 | from starrynet.log import [lg, info, error] |
| 80 | |
| 81 | ...get a default logger that doesn't require one newline per logging |
| 82 | call. |
| 83 | |
| 84 | Inherit from object to ensure that we have at least one new-style base |
| 85 | class, and can then use the __metaclass__ directive, to prevent this |
| 86 | error: |
| 87 | |
| 88 | TypeError: Error when calling the metaclass bases |
| 89 | a new-style class can't have only classic bases |
| 90 | |
| 91 | If Python2.5/logging/__init__.py defined Filterer as a new-style class, |
| 92 | via Filterer( object ): rather than Filterer, we wouldn't need this. |
| 93 | |
| 94 | Use singleton pattern to ensure only one logger is ever created.""" |
| 95 | |
| 96 | __metaclass__ = Singleton |
| 97 | |
| 98 | def __init__(self): |
| 99 | |
| 100 | Logger.__init__(self, "starrynet") |
| 101 | |
| 102 | # create console handler |
| 103 | ch = StreamHandlerNoNewline() |
| 104 | # create formatter |
| 105 | formatter = logging.Formatter(LOGMSGFORMAT) |
| 106 | # add formatter to ch |
| 107 | ch.setFormatter(formatter) |
| 108 | # add ch to lg |
| 109 | self.addHandler(ch) |
| 110 | |
| 111 | self.setLogLevel() |
| 112 | |
| 113 | def setLogLevel(self, levelname=None): |
| 114 | """Setup loglevel. |
| 115 | Convenience function to support lowercase names. |
| 116 | levelName: level name from LEVELS""" |
| 117 | level = LOGLEVELDEFAULT |
| 118 | if levelname is not None: |
| 119 | if levelname not in LEVELS: |
| 120 | raise Exception('unknown levelname seen in setLogLevel') |
| 121 | else: |
| 122 | level = LEVELS.get(levelname, level) |
| 123 | |
| 124 | self.setLevel(level) |
| 125 | self.handlers[0].setLevel(level) |
| 126 | |
| 127 | # pylint: disable=method-hidden |
| 128 | # "An attribute inherited from starrynet.log hide this method" (sic) |
| 129 | # Not sure why this is occurring - this function definitely gets called. |
| 130 | |
| 131 | # See /usr/lib/python2.5/logging/__init__.py; modified from warning() |
| 132 | def output(self, msg, *args, **kwargs): |