~certify-web-dev/twisted/certify-trunk

« back to all changes in this revision

Viewing changes to twisted/python/log.py

  • Committer: Bazaar Package Importer
  • Author(s): Matthias Klose
  • Date: 2006-02-22 22:52:47 UTC
  • Revision ID: james.westby@ubuntu.com-20060222225247-0mjb8ij9473m5zse
Tags: 2.2.0-1ubuntu1
Synchronize with Debian unstable.

Show diffs side-by-side

added added

removed removed

Lines of Context:
7
7
"""
8
8
 
9
9
# System Imports
10
 
try:
11
 
    import cStringIO as StringIO
12
 
except ImportError:
13
 
    import StringIO
14
 
 
15
10
import sys
16
11
import time
17
12
import warnings
18
13
 
19
14
# Sibling Imports
20
 
from twisted.python import util, context
 
15
from twisted.python import util, context, reflect
21
16
 
22
17
# Backwards compat
23
18
try:
253
248
        self.write = f.write
254
249
        self.flush = f.flush
255
250
 
 
251
    def _safeFormat(self, fmtString, crap):
 
252
        #There's a way we could make this if not safer at least more
 
253
        #informative: perhaps some sort of str/repr wrapper objects
 
254
        #could be wrapped around the things inside of 'crap'. That way
 
255
        #if the event dict contains an object with a bad __repr__, we
 
256
        #can only cry about that individual object instead of the
 
257
        #entire event dict.
 
258
        try:
 
259
            text = fmtString % crap
 
260
        except KeyboardInterrupt:
 
261
            raise
 
262
        except:
 
263
            try:
 
264
                text = ('Invalid format string or unformattable object in log message: %r, %s' % (fmtString, crap))
 
265
            except:
 
266
                try:
 
267
                    text = 'UNFORMATTABLE OBJECT WRITTEN TO LOG with fmt %r, MESSAGE LOST' % (fmtString,)
 
268
                except:
 
269
                    text = 'PATHOLOGICAL ERROR IN BOTH FORMAT STRING AND MESSAGE DETAILS, MESSAGE LOST'
 
270
        return text
 
271
 
256
272
    def emit(self, eventDict):
257
273
        edm = eventDict['message']
258
274
        if not edm:
259
275
            if eventDict['isError'] and eventDict.has_key('failure'):
260
276
                text = eventDict['failure'].getTraceback()
261
277
            elif eventDict.has_key('format'):
262
 
                try:
263
 
                    text = eventDict['format'] % eventDict
264
 
                except KeyboardInterrupt:
265
 
                    raise
266
 
                except:
267
 
                    try:
268
 
                        text = ('Invalid format string in log message: %s'
269
 
                                % eventDict)
270
 
                    except:
271
 
                        text = 'UNFORMATTABLE OBJECT WRITTEN TO LOG, MESSAGE LOST'
 
278
                text = self._safeFormat(eventDict['format'], eventDict)
272
279
            else:
273
280
                # we don't know how to log this
274
281
                return
275
282
        else:
276
 
            text = ' '.join(map(str, edm))
 
283
            text = ' '.join(map(reflect.safe_str, edm))
277
284
 
278
285
        timeStr = time.strftime(self.timeFormat, time.localtime(eventDict['time']))
279
286
        fmtDict = {'system': eventDict['system'], 'text': text.replace("\n", "\n\t")}
280
 
        msgStr = " [%(system)s] %(text)s\n" % fmtDict
 
287
        msgStr = self._safeFormat("[%(system)s] %(text)s\n", fmtDict)
281
288
 
282
 
        util.untilConcludes(self.write, timeStr + msgStr)
 
289
        util.untilConcludes(self.write, timeStr + " " + msgStr)
283
290
        util.untilConcludes(self.flush)  # Hoorj!
284
291
 
285
292
    def start(self):