Mercurial > p > roundup > code
annotate roundup/rlog.py @ 2505:bdd112cf61ba
rdbms backend full text search failure after import [SF#980314]
| author | Richard Jones <richard@users.sourceforge.net> |
|---|---|
| date | Mon, 28 Jun 2004 23:13:06 +0000 |
| parents | 15f3a6211a2d |
| children | a89b0bb417dc |
| 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 |
|
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 | 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 |
