Mercurial > p > roundup > code
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 |
| 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 |
