~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/trace.py

  • Committer: Martin Pool
  • Date: 2005-11-11 23:20:33 UTC
  • mto: (1185.33.43 bzr.dev)
  • mto: This revision was merged to the branch mainline in revision 1512.
  • Revision ID: mbp@sourcefrog.net-20051111232033-a06ce840d036efa9
Do debug messages not through python logging

Show diffs side-by-side

added added

removed removed

Lines of Context:
66
66
_file_handler = None
67
67
_stderr_handler = None
68
68
 
 
69
# destination files for debug messages
 
70
_trace_file = None
 
71
 
 
72
_bzr_log_file = None
 
73
 
69
74
class QuietFormatter(logging.Formatter):
70
75
    """Formatter that supresses the details of errors.
71
76
 
97
102
warning =   _bzr_logger.warning
98
103
log_error = _bzr_logger.error
99
104
error =     _bzr_logger.error
100
 
mutter =    _bzr_logger.debug
101
 
debug =     _bzr_logger.debug
102
 
 
 
105
 
 
106
 
 
107
def mutter(fmt, *args):
 
108
    if (_trace_file is not None) and (not _trace_file.closed):
 
109
        try:
 
110
            if len(args) > 0:
 
111
                print >>_trace_file, fmt % args
 
112
            else:
 
113
                print >>_trace_file, fmt
 
114
        except TypeError:
 
115
            print fmt
 
116
            print args
 
117
            raise
 
118
debug = mutter
103
119
 
104
120
def _rollover_trace_maybe(trace_fname):
105
121
    import stat
118
134
    # Messages are always written to here, so that we have some
119
135
    # information if something goes wrong.  In a future version this
120
136
    # file will be removed on successful completion.
121
 
    global _file_handler
 
137
    global _file_handler, _bzr_log_file
122
138
    import stat, codecs
123
139
 
124
140
    trace_fname = os.path.join(os.path.expanduser(tracefilename))
126
142
    try:
127
143
        LINE_BUFFERED = 1
128
144
        tf = codecs.open(trace_fname, 'at', 'utf8', buffering=LINE_BUFFERED)
129
 
 
 
145
        _bzr_log_file = tf
130
146
        if os.fstat(tf.fileno())[stat.ST_SIZE] == 0:
131
147
            tf.write("\nthis is a debug log for diagnosing/reporting problems in bzr\n")
132
148
            tf.write("you can delete or truncate this file, or include sections in\n")
133
149
            tf.write("bug reports to bazaar-ng@lists.canonical.com\n\n")
134
 
        
135
150
        _file_handler = logging.StreamHandler(tf)
136
151
        fmt = r'[%(process)5d] %(asctime)s.%(msecs)03d %(levelname)s: %(message)s'
137
152
        datefmt = r'%a %H:%M:%S'
143
158
 
144
159
 
145
160
def log_startup(argv):
146
 
    debug('bzr %s invoked on python %s (%s)',
 
161
    debug('\n\nbzr %s invoked on python %s (%s)',
147
162
          bzrlib.__version__,
148
163
          '.'.join(map(str, sys.version_info)),
149
164
          sys.platform)
176
191
 
177
192
def enable_default_logging():
178
193
    """Configure default logging to stderr and .bzr.log"""
179
 
    global _stderr_handler, _file_handler
180
 
 
 
194
    global _stderr_handler, _file_handler, _trace_file, _bzr_log_file
181
195
    _stderr_handler = logging.StreamHandler()
182
196
    _stderr_handler.setFormatter(QuietFormatter())
183
197
    logging.getLogger('').addHandler(_stderr_handler)
184
 
 
185
198
    if os.environ.get('BZR_DEBUG'):
186
199
        level = logging.DEBUG
187
200
    else:
188
201
        level = logging.INFO
189
 
 
190
202
    _stderr_handler.setLevel(logging.INFO)
191
 
 
192
203
    if not _file_handler:
193
204
        open_tracefile()
194
 
 
 
205
    _trace_file = _bzr_log_file
195
206
    if _file_handler:
196
207
        _file_handler.setLevel(level)
197
 
 
198
208
    _bzr_logger.setLevel(level) 
199
209
 
200
210
def disable_default_logging():
208
218
    l.removeHandler(_stderr_handler)
209
219
    if _file_handler:
210
220
        l.removeHandler(_file_handler)
 
221
    _trace_file = None
211
222
 
212
223
 
213
224
def enable_test_log(to_file):
214
225
    """Redirect logging to a temporary file for a test"""
215
226
    disable_default_logging()
216
 
    global _test_log_hdlr
 
227
    global _test_log_hdlr, _trace_file
217
228
    hdlr = logging.StreamHandler(to_file)
218
229
    hdlr.setLevel(logging.DEBUG)
219
230
    hdlr.setFormatter(logging.Formatter('%(levelname)8s  %(message)s'))
220
231
    _bzr_logger.addHandler(hdlr)
221
232
    _bzr_logger.setLevel(logging.DEBUG)
222
233
    _test_log_hdlr = hdlr
 
234
    _trace_file = to_file
223
235
 
224
236
 
225
237
def disable_test_log():
226
238
    _bzr_logger.removeHandler(_test_log_hdlr)
 
239
    _trace_file = None
227
240
    enable_default_logging()
228
241
 
229
242