Mercurial > p > roundup > code
annotate roundup/rlog.py @ 2670:bdf3a73dfd04
merge from maint-0-7
| author | Richard Jones <richard@users.sourceforge.net> |
|---|---|
| date | Tue, 07 Sep 2004 10:40:15 +0000 |
| parents | 6e9bd67fefa9 |
| children | 93e2e5b55a3c |
| 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 | 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 |
|
2605
6e9bd67fefa9
complete transition from HYPERDBDEBUG to new logging
Richard Jones <richard@users.sourceforge.net>
parents:
2585
diff
changeset
|
83 self.format = '%(time)s %(level)s %(message)s' |
|
2397
fa50e1347397
added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
84 |
|
fa50e1347397
added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
85 def setFile(self, file): |
|
fa50e1347397
added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
86 '''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
|
87 a string filename to append entries to. |
|
fa50e1347397
added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
88 ''' |
|
fa50e1347397
added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
89 if isinstance(file, type('')): |
|
fa50e1347397
added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
90 file = open(file, 'a') |
|
fa50e1347397
added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
91 self.file = file |
|
fa50e1347397
added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
92 def setLevel(self, level): |
|
fa50e1347397
added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
93 '''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
|
94 (one of the LVL_ values) or a string level name. |
|
fa50e1347397
added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
95 ''' |
|
fa50e1347397
added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
96 if isinstance(level, type('')): |
| 2412 | 97 for num, name in BasicLogging.NAMES.items(): |
|
2397
fa50e1347397
added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
98 if name == level: |
|
fa50e1347397
added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
99 level = num |
|
fa50e1347397
added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
100 self.level = level |
|
2605
6e9bd67fefa9
complete transition from HYPERDBDEBUG to new logging
Richard Jones <richard@users.sourceforge.net>
parents:
2585
diff
changeset
|
101 def setFormat(self, format): |
|
6e9bd67fefa9
complete transition from HYPERDBDEBUG to new logging
Richard Jones <richard@users.sourceforge.net>
parents:
2585
diff
changeset
|
102 self.format = format |
|
2397
fa50e1347397
added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
103 def write(self, level, message): |
|
2605
6e9bd67fefa9
complete transition from HYPERDBDEBUG to new logging
Richard Jones <richard@users.sourceforge.net>
parents:
2585
diff
changeset
|
104 info = { |
|
6e9bd67fefa9
complete transition from HYPERDBDEBUG to new logging
Richard Jones <richard@users.sourceforge.net>
parents:
2585
diff
changeset
|
105 'time': time.strftime('%Y-%m-%d %H:%M:%D'), |
|
6e9bd67fefa9
complete transition from HYPERDBDEBUG to new logging
Richard Jones <richard@users.sourceforge.net>
parents:
2585
diff
changeset
|
106 'level': BasicLogging.NAMES[level], |
|
6e9bd67fefa9
complete transition from HYPERDBDEBUG to new logging
Richard Jones <richard@users.sourceforge.net>
parents:
2585
diff
changeset
|
107 'message': message |
|
6e9bd67fefa9
complete transition from HYPERDBDEBUG to new logging
Richard Jones <richard@users.sourceforge.net>
parents:
2585
diff
changeset
|
108 } |
|
6e9bd67fefa9
complete transition from HYPERDBDEBUG to new logging
Richard Jones <richard@users.sourceforge.net>
parents:
2585
diff
changeset
|
109 message = self.format%info |
|
2397
fa50e1347397
added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
110 self._write(message) |
|
2605
6e9bd67fefa9
complete transition from HYPERDBDEBUG to new logging
Richard Jones <richard@users.sourceforge.net>
parents:
2585
diff
changeset
|
111 self._write('\n') |
|
2397
fa50e1347397
added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
112 def _write(self, text): |
|
fa50e1347397
added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
113 file = self.file or sys.stderr |
|
fa50e1347397
added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
114 file.write(text) |
|
fa50e1347397
added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
115 def debug(self, message): |
|
fa50e1347397
added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
116 if self.level < BasicLogging.LVL_DEBUG: return |
|
fa50e1347397
added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
117 self.write(BasicLogging.LVL_DEBUG, message) |
|
fa50e1347397
added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
118 def info(self, message): |
|
fa50e1347397
added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
119 if self.level < BasicLogging.LVL_INFO: return |
|
fa50e1347397
added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
120 self.write(BasicLogging.LVL_INFO, message) |
|
fa50e1347397
added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
121 def warning(self, message): |
|
fa50e1347397
added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
122 if self.level < BasicLogging.LVL_WARNING: return |
|
fa50e1347397
added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
123 self.write(BasicLogging.LVL_WARNING, message) |
|
fa50e1347397
added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
124 def error(self, message): |
|
fa50e1347397
added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
125 if self.level < BasicLogging.LVL_ERROR: return |
|
fa50e1347397
added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
126 self.write(BasicLogging.LVL_ERROR, message) |
|
fa50e1347397
added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
127 def exception(self, message): |
|
fa50e1347397
added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
128 if self.level < BasicLogging.LVL_ERROR: return |
|
fa50e1347397
added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
129 self.write(BasicLogging.LVL_ERROR, message) |
|
fa50e1347397
added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
130 self._write(traceback.format_exception(*(sys.exc_info()))) |
|
fa50e1347397
added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
131 |
