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
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
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
Richard Jones <richard@users.sourceforge.net>
parents: 2397
diff changeset
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

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