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 | |
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 |
