1
# Copyright (C) 1998,1999,2000,2001,2002 by the Free Software Foundation, Inc.
3
# This program is free software; you can redistribute it and/or
4
# modify it under the terms of the GNU General Public License
5
# as published by the Free Software Foundation; either version 2
6
# of the License, or (at your option) any later version.
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
# GNU General Public License for more details.
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17
"""File-based logger, writes to named category files in mm_cfg.LOG_DIR."""
22
from types import StringType
24
from Mailman import mm_cfg
25
from Mailman.Logging.Utils import _logexc
27
# Set this to the encoding to be used for your log file output. If set to
28
# None, then it uses your system's default encoding. Otherwise, it must be an
29
# encoding string appropriate for codecs.open().
30
LOG_ENCODING = 'iso-8859-1'
35
def __init__(self, category, nofail=1, immediate=0):
36
"""nofail says to fallback to sys.__stderr__ if write fails to
37
category file - a complaint message is emitted, but no exception is
38
raised. Set nofail=0 if you want to handle the error in your code,
41
immediate=1 says to create the log file on instantiation.
42
Otherwise, the file is created only when there are writes pending.
44
self.__filename = os.path.join(mm_cfg.LOG_DIR, category)
46
self.__nofail = nofail
47
self.__encoding = LOG_ENCODING or sys.getdefaultencoding()
55
return '<%s to %s>' % (self.__class__.__name__, `self.__filename`)
66
self.__filename, 'a+', self.__encoding, 'replace',
69
f = open(self.__filename, 'a+', 1)
76
f = self.__fp = sys.__stderr__
83
if hasattr(f, 'flush'):
87
if isinstance(msg, StringType):
88
msg = unicode(msg, self.__encoding)
95
def writelines(self, lines):
102
self.__get_f().close()