diff options
| author | bwarsaw | 1998-07-02 19:33:22 +0000 |
|---|---|---|
| committer | bwarsaw | 1998-07-02 19:33:22 +0000 |
| commit | 91d9c5c5171c26bef1e07f3086888aed02d0db6f (patch) | |
| tree | 6eb99909c3bca3b319d5e06450dac7439d9984de /Mailman/Logging/Logger.py | |
| parent | e347c2006bc969d1b3cade65f22ba2191a298f91 (diff) | |
| download | mailman-91d9c5c5171c26bef1e07f3086888aed02d0db6f.tar.gz mailman-91d9c5c5171c26bef1e07f3086888aed02d0db6f.tar.zst mailman-91d9c5c5171c26bef1e07f3086888aed02d0db6f.zip | |
Subpackage containing all logging classes.
StampedLogger is carried over from before, with some changes.
Logger used to be in Mailman.Utils
MultiLogger is new, it is used to log identical message to a list of
loggers supporting the write interface of file-like objects (e.g. a
Logger or sys.__stdout__).
Diffstat (limited to 'Mailman/Logging/Logger.py')
| -rw-r--r-- | Mailman/Logging/Logger.py | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/Mailman/Logging/Logger.py b/Mailman/Logging/Logger.py new file mode 100644 index 000000000..8a111940a --- /dev/null +++ b/Mailman/Logging/Logger.py @@ -0,0 +1,79 @@ +# Copyright (C) 1998 by the Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +"""File-based logger, writes to named category files in mm_cfg.LOG_DIR.""" + +import sys +import os +import Mailman.mm_cfg +from Mailman.Logging.Utils import __logexc + + +class Logger: + 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.__filename = os.path.join(Mailman.mm_cfg.LOG_DIR, category) + self.__fp = None + self.__nofail = nofail + + def __del__(self): + self.close() + + def __repr__(self): + return '<Logger to file: %s>' % self.__filename + + def __get_f(self): + if self.__fp: + return self.__fp + else: + try: + ou = os.umask(002) + try: + f = self.__fp = open(self.__filename, 'a+') + finally: + os.umask(ou) + except IOError, msg: + if self.__nofail: + __logexc(self, msg) + else: + # re-raise the original exception + raise + return f + + def flush(self): + f = self.__get_f() + if hasattr(f, 'flush'): + f.flush() + + def write(self, msg): + f = self.__get_f() + try: + f.write(msg) + except IOError, msg: + __logexc(self, msg) + + def writelines(self, lines): + for l in lines: + self.write(l) + + def close(self): + if not self.__fp: + return + self.__get_f().close() |
