summaryrefslogtreecommitdiff
path: root/Mailman/Queue/Runner.py
diff options
context:
space:
mode:
authorbwarsaw2006-04-17 04:08:17 +0000
committerbwarsaw2006-04-17 04:08:17 +0000
commit0ed815a216c7bb6f820cfdf99fc8d31bcfd19fc0 (patch)
tree7b710a785331abfe28b5b46a7695e6cbd81b7794 /Mailman/Queue/Runner.py
parent9934c9b2b0e76a0b77b7869ecf68cd960d4d5bd7 (diff)
downloadmailman-0ed815a216c7bb6f820cfdf99fc8d31bcfd19fc0.tar.gz
mailman-0ed815a216c7bb6f820cfdf99fc8d31bcfd19fc0.tar.zst
mailman-0ed815a216c7bb6f820cfdf99fc8d31bcfd19fc0.zip
- Convert all logging to Python's standard logging module. Get rid of all
traces of our crufty old Syslog. Most of this work was purely mechanical, except for: 1) Initializing the loggers. For this, there's a new module Mailman/loginit.py (yes all modules from now on will use PEP 8 names). We can't call this 'logging.py' because that will interfere with importing the stdlib module of the same name (can you say Python 2.5 and absolute imports?). If you want to write log messages both to the log file and to stderr, pass True to loginit.initialize(). This will turn on propagation of log messages to the parent 'mailman' logger, which is set up to print to stderr. This is how bin/qrunner works when not running as a subprocess of mailmanctl. 2) The driver script. I had to untwist the StampedLogger stuff and implement differently printing exceptions and such to log/error because standard logging objects don't have a write() method. So we write to a cStringIO and then pass that to the logger. 3) SMTPDirect.py because of the configurability of the log messages. This required changing SafeDict into a dict subclass (which is better than using UserDicts anyway -- yay Python 2.3!). It's probably still possible to flummox things up if you change the name of the loggers in the SMTP_LOG_* variables in mm_cfg.py. However, the worst you can do is cause output to go to stderr and not go to a log file. Note too that all entry points into the Mailman system must call Mailman.loginit.initialize() or the log output will go to stderr (which may occasionally be what you want). Currently all CGIs and qrunners should be working properly. I wish I could have tested all code paths that touch the logger, but that's infeasible. I have tested this, but it's possible that there were some mistakes in the translation. - Mailman.Bouncers.BounceAPI.Stop is a singleton, but not a class instance any more. - True/False code cleanup, PEP 8 import restructuring, whitespace normalization, and copyright year updates, as appropriate.
Diffstat (limited to 'Mailman/Queue/Runner.py')
-rw-r--r--Mailman/Queue/Runner.py23
1 files changed, 12 insertions, 11 deletions
diff --git a/Mailman/Queue/Runner.py b/Mailman/Queue/Runner.py
index 7c99c50a5..56baf431b 100644
--- a/Mailman/Queue/Runner.py
+++ b/Mailman/Queue/Runner.py
@@ -19,18 +19,20 @@
import time
import weakref
import traceback
+import logging
import email.Errors
from cStringIO import StringIO
from Mailman import Errors
-from Mailman import MailList
-from Mailman import Utils
from Mailman import i18n
+from Mailman import MailList
from Mailman import mm_cfg
-from Mailman.Logging.Syslog import syslog
+from Mailman import Utils
from Mailman.Queue.Switchboard import Switchboard
+log = logging.getLogger('mailman.error')
+
class Runner:
@@ -97,7 +99,7 @@ class Runner:
# There's not much we can do (and we didn't even get the
# metadata, so just log the exception and continue.
self._log(e)
- syslog('error', 'Ignoring unparseable message: %s', filebase)
+ log.error('Ignoring unparseable message: %s', filebase)
continue
try:
self._onefile(msg, msgdata)
@@ -112,7 +114,7 @@ class Runner:
# Put a marker in the metadata for unshunting
msgdata['whichq'] = self._switchboard.whichq()
filebase = self._shunt.enqueue(msg, msgdata)
- syslog('error', 'SHUNTING: %s', filebase)
+ log.error('SHUNTING: %s', filebase)
# Other work we want to do each time through the loop
Utils.reap(self._kids, once=True)
self._doperiodic()
@@ -133,9 +135,8 @@ class Runner:
listname = mm_cfg.MAILMAN_SITE_LIST
mlist = self._open_list(listname)
if not mlist:
- syslog('error',
- 'Dequeuing message destined for missing list: %s',
- listname)
+ log.error('Dequeuing message destined for missing list: %s',
+ listname)
self._shunt.enqueue(msg, msgdata)
return
# Now process this message, keeping track of any subprocesses that may
@@ -178,17 +179,17 @@ class Runner:
try:
mlist = MailList.MailList(listname, lock=False)
except Errors.MMListError, e:
- syslog('error', 'error opening list: %s\n%s', listname, e)
+ log.error('error opening list: %s\n%s', listname, e)
return None
else:
self._listcache[listname] = mlist
return mlist
def _log(self, exc):
- syslog('error', 'Uncaught runner exception: %s', exc)
+ log.error('Uncaught runner exception: %s', exc)
s = StringIO()
traceback.print_exc(file=s)
- syslog('error', s.getvalue())
+ log.error('%s', s.getvalue())
#
# Subclasses can override these methods.