diff options
| author | klm | 1998-03-30 15:04:11 +0000 |
|---|---|---|
| committer | klm | 1998-03-30 15:04:11 +0000 |
| commit | 16ed835fb3f6bc06f3d0bea161ea7c054f0b6b7a (patch) | |
| tree | bb5192532833e124e7da53c6ec48ab124d32157e /modules/mm_utils.py | |
| parent | 77c5fdf0ab9cbf5efc785eaaa9a8e4722fee3736 (diff) | |
| download | mailman-16ed835fb3f6bc06f3d0bea161ea7c054f0b6b7a.tar.gz mailman-16ed835fb3f6bc06f3d0bea161ea7c054f0b6b7a.tar.zst mailman-16ed835fb3f6bc06f3d0bea161ea7c054f0b6b7a.zip | |
Adding 'nofail' option to StampedLogger init, so programs that use
StampedLogger for debugging output can choose to initialize it so that
failure is detectable, and thus can be handled in the program.
Diffstat (limited to 'modules/mm_utils.py')
| -rw-r--r-- | modules/mm_utils.py | 31 |
1 files changed, 23 insertions, 8 deletions
diff --git a/modules/mm_utils.py b/modules/mm_utils.py index cd2567afb..96c2b04ed 100644 --- a/modules/mm_utils.py +++ b/modules/mm_utils.py @@ -257,9 +257,16 @@ def map_maillists(func, names=None, unlock=None, verbose=0): return got class Logger: - def __init__(self, category): + """File-based logger, writes to named category files in mm_cfg.LOG_DIR.""" + def __init__(self, category, nofail=1): + """Nofail (by default) says to fallback to sys.stderr if write + fails to category file. A message is emitted, but the IOError is + caught. Set nofail=0 if you want to handle the error in your code, + instead.""" + self.__category=category self.__f = None + self.__nofail = nofail def __get_f(self): if self.__f: return self.__f @@ -272,9 +279,12 @@ class Logger: finally: os.umask(ou) except IOError, msg: - f = self.__f = sys.stderr - f.write("logger open %s failed %s, using stderr\n" - % (fname, msg)) + if not self.__nofail: + raise IOError, msg, sys.exc_info()[2] + else: + f = self.__f = sys.stderr + f.write("logger open %s failed %s, using stderr\n" + % (fname, msg)) return f def flush(self): f = self.__get_f() @@ -305,7 +315,7 @@ class Logger: class StampedLogger(Logger): """Record messages in log files, including date stamp and optional label. - If manual_reset is off (default on), then timestamp prefix will + If manual_reprime is on (off by default), then timestamp prefix will included only on first .write() and on any write immediately following a call to the .reprime() method. This is useful for when StampedLogger is substituting for sys.stderr, where you'd like to see the grouping of @@ -313,15 +323,20 @@ class StampedLogger(Logger): group, for uncaught exceptions where a script is bombing). In any case, the identifying prefix will only follow writes that start - on a new line.""" + on a new line. - def __init__(self, category, label=None, manual_reprime=0): + Nofail (by default) says to fallback to sys.stderr if write fails to + category file. A message is emitted, but the IOError is caught. + Initialize with nofail=0 if you want to handle the error in your code, + instead.""" + + def __init__(self, category, label=None, manual_reprime=0, nofail=1): "If specified, optional label is included after timestamp." self.label = label self.manual_reprime = manual_reprime self.primed = 1 self.bol = 1 - Logger.__init__(self, category) + Logger.__init__(self, category, nofail=nofail) def reprime(self): """Reset so timestamp will be included with next write.""" self.primed = 1 |
