~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/trace.py

  • Committer: John Arbash Meinel
  • Date: 2005-11-08 18:36:26 UTC
  • mto: This revision was merged to the branch mainline in revision 1727.
  • Revision ID: john@arbash-meinel.com-20051108183626-71f8414338043265
Updating unified_diff to take a factory, using the new diff algorithm in the code.

Show diffs side-by-side

added added

removed removed

Lines of Context:
33
33
# TODO: When running the test suites, we should add an additional
34
34
# logger that sends messages into the test log file.
35
35
 
 
36
# FIXME: Unfortunately it turns out that python's logging module
 
37
# is quite expensive, even when the message is not printed by any handlers.
 
38
# We should perhaps change back to just simply doing it here.
 
39
 
36
40
 
37
41
import sys
38
42
import os
54
58
    # can get the exception details is we suppress them here.
55
59
 
56
60
    def format(self, record):
57
 
        s = 'bzr: '
58
61
        if record.levelno >= logging.WARNING:
59
 
            s += record.levelname + ': '
 
62
            s = 'bzr: ' + record.levelname + ': '
 
63
        else:
 
64
            s = ''
60
65
            
61
 
        s += record.getMessage() 
 
66
        s += record.getMessage()
 
67
 
 
68
        ##import textwrap
 
69
        ##s = textwrap.fill(s)
62
70
            
63
71
        if record.exc_info:
64
72
            # give just a summary of the exception, not the whole thing
77
85
# configure convenient aliases for output routines
78
86
 
79
87
_bzr_logger = logging.getLogger('bzr')
80
 
_bzr_logger.setLevel(logging.DEBUG) 
81
88
 
82
89
info = note = _bzr_logger.info
83
90
warning =   _bzr_logger.warning
101
108
            return
102
109
        old_fname = trace_fname + '.old'
103
110
 
104
 
        try:
105
 
            # must remove before rename on windows
106
 
            os.remove(old_fname)
107
 
        except OSError:
108
 
            pass
 
111
        from osutils import rename
 
112
        rename(trace_fname, old_fname)
109
113
 
110
 
        try:
111
 
            # might fail if in use on windows
112
 
            os.rename(trace_fname, old_fname)
113
 
        except OSError:
114
 
            pass
115
114
    except OSError:
116
115
        return
117
116
 
156
155
          sys.platform)
157
156
 
158
157
    debug('  arguments: %r', argv)
159
 
    debug('  working dir: %s', os.getcwdu())
 
158
    debug('  working dir: %r', os.getcwdu())
160
159
 
161
160
 
162
161
def log_exception(msg=None):
163
 
    """Log the last exception into the trace file.
 
162
    """Log the last exception to stderr and the trace file.
164
163
 
165
164
    The exception string representation is used as the error
166
165
    summary, unless msg is given.
167
166
    """
 
167
    ei = sys.exc_info()
168
168
    if msg == None:
169
 
        ei = sys.exc_info()
170
169
        msg = str(ei[1])
171
 
 
172
170
    if msg and (msg[-1] == '\n'):
173
171
        msg = msg[:-1]
174
 
        
 
172
    msg += '\n  command: %s' % ' '.join(repr(arg) for arg in sys.argv)
 
173
    msg += '\n      pwd: %r' % os.getcwdu()
 
174
    msg += '\n    error: %s' % ei[0]        # exception type
175
175
    _bzr_logger.exception(msg)
176
176
 
177
177
 
 
178
def log_exception_quietly():
 
179
    """Log the last exception to the trace file only.
 
180
 
 
181
    Used for exceptions that occur internally and that may be 
 
182
    interesting to developers but not to users.  For example, 
 
183
    errors loading plugins.
 
184
    """
 
185
    debug(traceback.format_exc())
 
186
 
178
187
 
179
188
def enable_default_logging():
180
189
    """Configure default logging to stderr and .bzr.log"""
193
202
 
194
203
    _stderr_handler.setLevel(logging.INFO)
195
204
    _file_handler.setLevel(level)
 
205
    _bzr_logger.setLevel(level) 
196
206
 
197
207
    logging.getLogger('').addHandler(_stderr_handler)
198
208
 
199
209
 
200
 
 
201
210
def disable_default_logging():
202
211
    """Turn off default log handlers.
203
212