/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/trace.py

  • Committer: Martin Pool
  • Date: 2007-09-14 06:31:28 UTC
  • mfrom: (2822 +trunk)
  • mto: This revision was merged to the branch mainline in revision 2823.
  • Revision ID: mbp@sourcefrog.net-20070914063128-0p7mh6zfb4pzdg9p
merge trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
56
56
 
57
57
from bzrlib.lazy_import import lazy_import
58
58
lazy_import(globals(), """
 
59
from cStringIO import StringIO
59
60
import errno
60
61
import logging
 
62
import traceback
61
63
""")
62
64
 
63
65
import bzrlib
64
 
from bzrlib.symbol_versioning import (deprecated_function,
65
 
        zero_nine,
66
 
        )
67
66
 
68
67
lazy_import(globals(), """
69
68
from bzrlib import debug
71
70
 
72
71
_file_handler = None
73
72
_stderr_handler = None
74
 
_stderr_quiet = False
 
73
_verbosity_level = 0
75
74
_trace_file = None
76
75
_trace_depth = 0
77
76
_bzr_log_file = None
125
124
    #_trace_file.flush()
126
125
 
127
126
 
 
127
def mutter_callsite(stacklevel, fmt, *args):
 
128
    """Perform a mutter of fmt and args, logging the call trace.
 
129
 
 
130
    :param stacklevel: The number of frames to show. None will show all
 
131
        frames.
 
132
    :param fmt: The format string to pass to mutter.
 
133
    :param args: A list of substitution variables.
 
134
    """
 
135
    outf = StringIO()
 
136
    traceback.print_stack(limit=stacklevel + 1, file=outf)
 
137
    formatted_lines = outf.getvalue().splitlines()
 
138
    formatted_stack = '\n'.join(formatted_lines[:-2])
 
139
    mutter(fmt + "\nCalled from:\n%s", *(args + (formatted_stack,)))
 
140
 
 
141
 
128
142
def _rollover_trace_maybe(trace_fname):
129
143
    import stat
130
144
    try:
152
166
        else:
153
167
            home = os.path.expanduser('~')
154
168
        _bzr_log_filename = os.path.join(home, '.bzr.log')
 
169
    else:
 
170
        _bzr_log_filename = tracefilename
155
171
 
156
172
    _bzr_log_filename = os.path.expanduser(_bzr_log_filename)
157
173
    _rollover_trace_maybe(_bzr_log_filename)
176
192
        warning("failed to open trace file: %s" % (e))
177
193
 
178
194
 
179
 
@deprecated_function(zero_nine)
180
 
def log_exception(msg=None):
181
 
    """Log the last exception to stderr and the trace file.
182
 
 
183
 
    The exception string representation is used as the error
184
 
    summary, unless msg is given.
185
 
 
186
 
    Please see log_exception_quietly() for the replacement API.
187
 
    """
188
 
    if msg:
189
 
        error(msg)
190
 
    log_exception_quietly()
191
 
 
192
 
 
193
195
def log_exception_quietly():
194
196
    """Log the last exception to the trace file only.
195
197
 
216
218
    _bzr_logger.setLevel(logging.DEBUG)
217
219
 
218
220
 
 
221
def set_verbosity_level(level):
 
222
    """Set the verbosity level.
 
223
 
 
224
    :param level: -ve for quiet, 0 for normal, +ve for verbose
 
225
    """
 
226
    global _verbosity_level
 
227
    _verbosity_level = level
 
228
    _update_logging_level(level < 0)
 
229
 
 
230
 
 
231
def get_verbosity_level():
 
232
    """Get the verbosity level.
 
233
 
 
234
    See set_verbosity_level() for values.
 
235
    """
 
236
    return _verbosity_level
 
237
 
 
238
 
219
239
def be_quiet(quiet=True):
220
 
    global _stderr_handler, _stderr_quiet
221
 
    
222
 
    _stderr_quiet = quiet
 
240
    # Perhaps this could be deprecated now ...
 
241
    if quiet:
 
242
        set_verbosity_level(-1)
 
243
    else:
 
244
        set_verbosity_level(0)
 
245
 
 
246
 
 
247
def _update_logging_level(quiet=True):
 
248
    """Hide INFO messages if quiet."""
223
249
    if quiet:
224
250
        _stderr_handler.setLevel(logging.WARNING)
225
251
    else:
227
253
 
228
254
 
229
255
def is_quiet():
230
 
    global _stderr_quiet
231
 
    return _stderr_quiet
 
256
    """Is the verbosity level negative?"""
 
257
    return _verbosity_level < 0
 
258
 
 
259
 
 
260
def is_verbose():
 
261
    """Is the verbosity level positive?"""
 
262
    return _verbosity_level > 0
232
263
 
233
264
 
234
265
def disable_default_logging():