annotate roundup/rlog.py @ 2467:76ead526113d

client instances may be used as translation engines. any backend translator may be passed as constructor argument or via setTranslator() method. by default, templating.translationService is used. use this engine to translate client messages.
author Alexander Smishlajev <a1s@users.sourceforge.net>
date Tue, 15 Jun 2004 09:19:49 +0000
parents 15f3a6211a2d
children a89b0bb417dc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2397
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1 '''Roundup basic logging support.
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3 This module will use the standard Python logging implementation when
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
4 available. If not, then a basic logging implementation, BasicLogging and
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
5 BasicLoggingChannel will be used.
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
6
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
7 Configuration for "logging" module:
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
8 - tracker configuration file specifies the location of a logging
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
9 configration file as LOGGING_CONFIG
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
10 - roundup-server and roundup-mailgw specify the location of a logging
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
11 configuration file on the command line
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
12 Configuration for "BasicLogging" implementation:
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
13 - tracker configuration file specifies the location of a log file
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
14 LOGGING_FILENAME
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
15 - tracker configuration file specifies the level to log to as
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
16 LOGGING_LEVEL
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
17 - roundup-server and roundup-mailgw specify the location of a log
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
18 file on the command line
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
19 - roundup-server and roundup-mailgw specify the level to log to on
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
20 the command line
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
21
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
22 In both cases, if no logfile is specified then logging will simply be sent
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
23 to sys.stderr with only logging of ERROR messages.
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
24
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
25 In terms of the Roundup code using the logging implementation:
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
26 - a "logging" object will be available on the "config" object for each
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
27 tracker
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
28 - the roundup-server and roundup-mailgw code will have a global "logging"
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
29 object.
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
30
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
31 It is intended that the logger API implementation here be the same as (or
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
32 close enough to) that of the standard Python library "logging" module.
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
33 '''
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
34 import sys, time, traceback
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
35
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
36 class BasicLogging:
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
37 LVL_DEBUG = 4
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
38 LVL_INFO = 3
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
39 LVL_WARNING= 2
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
40 LVL_ERROR= 1
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
41 LVL_NONE = 0
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
42 NAMES = {
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
43 LVL_DEBUG: 'DEBUG',
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
44 LVL_INFO: 'INFO',
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
45 LVL_WARNING: 'WARNING',
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
46 LVL_ERROR: 'ERROR',
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
47 }
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
48 level = LVL_INFO
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
49 loggers = {}
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
50 file = None
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
51 def getLogger(self, name):
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
52 return self.loggers.setdefault(name, BasicLogger(self.file, self.level))
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
53 def fileConfig(self, filename):
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
54 '''User is attempting to use a config file, but the basic logger
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
55 doesn't support that.'''
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
56 raise RuntimeError, "File-based logging configuration requires "\
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
57 "the logging package."
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
58 def setFile(self, file):
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
59 '''Set the file to log to. "file" is either an open file object or
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
60 a string filename to append entries to.
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
61 '''
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
62 if isinstance(file, type('')):
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
63 file = open(file, 'a')
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
64 self.file = file
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
65 def setLevel(self, level):
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
66 '''Set the maximum logging level. "level" is either a level number
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
67 (one of the LVL_ values) or a string level name.
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
68 '''
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
69 if isinstance(level, type('')):
2412
Richard Jones <richard@users.sourceforge.net>
parents: 2397
diff changeset
70 for num, name in self.NAMES.items():
2397
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
71 if name == level:
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
72 level = num
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
73 self.level = level
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
74
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
75 class BasicLogger:
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
76 '''Used when the standard Python library logging module isn't available.
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
77
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
78 Supports basic configuration through the tracker config file vars
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
79 LOGGING_LEVEL and LOGGING_FILENAME.'''
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
80 def __init__(self, file, level):
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
81 self.file = file
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
82 self.level = level
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
83
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
84 def setFile(self, file):
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
85 '''Set the file to log to. "file" is either an open file object or
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
86 a string filename to append entries to.
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
87 '''
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
88 if isinstance(file, type('')):
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
89 file = open(file, 'a')
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
90 self.file = file
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
91 def setLevel(self, level):
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
92 '''Set the maximum logging level. "level" is either a level number
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
93 (one of the LVL_ values) or a string level name.
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
94 '''
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
95 if isinstance(level, type('')):
2412
Richard Jones <richard@users.sourceforge.net>
parents: 2397
diff changeset
96 for num, name in BasicLogging.NAMES.items():
2397
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
97 if name == level:
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
98 level = num
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
99 self.level = level
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
100 def write(self, level, message):
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
101 message = '%s %s %s'%(time.strftime('%Y-%m-%d %H:%M:%D'),
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
102 BasicLogging.NAMES[level], message)
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
103 self._write(message)
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
104 def _write(self, text):
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
105 file = self.file or sys.stderr
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
106 file.write(text)
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
107 def debug(self, message):
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
108 if self.level < BasicLogging.LVL_DEBUG: return
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
109 self.write(BasicLogging.LVL_DEBUG, message)
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
110 def info(self, message):
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
111 if self.level < BasicLogging.LVL_INFO: return
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
112 self.write(BasicLogging.LVL_INFO, message)
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
113 def warning(self, message):
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
114 if self.level < BasicLogging.LVL_WARNING: return
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
115 self.write(BasicLogging.LVL_WARNING, message)
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
116 def error(self, message):
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
117 if self.level < BasicLogging.LVL_ERROR: return
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
118 self.write(BasicLogging.LVL_ERROR, message)
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
119 def exception(self, message):
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
120 if self.level < BasicLogging.LVL_ERROR: return
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
121 self.write(BasicLogging.LVL_ERROR, message)
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
122 self._write(traceback.format_exception(*(sys.exc_info())))
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
123

Roundup Issue Tracker: http://roundup-tracker.org/