Mercurial > p > roundup > code
annotate roundup/rlog.py @ 2806:845e87d5e3ba
translator objects now have the following search path:
- selected locale messages in the tracker locale dir
- selected locale messages in the system locale dir
- english messages in the tracker locale dir
- english messages in the system locale dir
automatically compile .mo files if needed (found .po file
and .mo is missing or .po mtime is greater that .mo mtime)
removed support for python < 2.0. gettext module is now required.
get_translation: removed 'domain' argument, added 'tracker_home' argument
| author | Alexander Smishlajev <a1s@users.sourceforge.net> |
|---|---|
| date | Sat, 23 Oct 2004 14:03:34 +0000 |
| parents | 93e2e5b55a3c |
| children | 9c8de04a76b1 |
| 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 = { |
|
2727
93e2e5b55a3c
new Interval props weren't created properly in rdbms
Richard Jones <richard@users.sourceforge.net>
parents:
2605
diff
changeset
|
105 'time': time.strftime('%Y-%m-%d %H:%M:%S'), |
|
2605
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 |
