~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/trace.py

  • Committer: Martin Pool
  • Date: 2005-08-24 08:59:32 UTC
  • Revision ID: mbp@sourcefrog.net-20050824085932-c61f1f1f1c930e13
- Add a simple UIFactory 

  The idea of this is to let a client of bzrlib set some 
  policy about how output is displayed.

  In this revision all that's done is that progress bars
  are constructed by a policy established by the application
  rather than being randomly constructed in the library 
  or passed down the calls.  This avoids progress bars
  popping up while running the test suite and cleans up
  some code.

Show diffs side-by-side

added added

removed removed

Lines of Context:
41
41
 
42
42
 
43
43
_file_handler = None
44
 
_stderr_handler = None
45
44
 
46
45
 
47
46
class QuietFormatter(logging.Formatter):
70
69
 
71
70
        return s
72
71
        
 
72
################
 
73
# configure default handler to stderr
 
74
 
 
75
_stderr_handler = logging.StreamHandler()
 
76
_stderr_handler.setFormatter(QuietFormatter())
 
77
 
 
78
if os.environ.get('BZR_DEBUG'):
 
79
    _stderr_handler.setLevel(logging.DEBUG)
 
80
else:
 
81
    _stderr_handler.setLevel(logging.INFO)
 
82
 
 
83
logging.getLogger('').addHandler(_stderr_handler)
73
84
 
74
85
 
75
86
 
79
90
_bzr_logger = logging.getLogger('bzr')
80
91
_bzr_logger.setLevel(logging.DEBUG) 
81
92
 
82
 
info = note = _bzr_logger.info
 
93
note =      _bzr_logger.info
83
94
warning =   _bzr_logger.warning
84
95
log_error = _bzr_logger.error
85
96
error =     _bzr_logger.error
117
128
 
118
129
 
119
130
 
120
 
def open_tracefile(tracefilename='~/.bzr.log'):
 
131
def open_tracefile(argv=[], tracefilename='~/.bzr.log'):
121
132
    # Messages are always written to here, so that we have some
122
133
    # information if something goes wrong.  In a future version this
123
134
    # file will be removed on successful completion.
143
154
        _file_handler.setLevel(logging.DEBUG)
144
155
        logging.getLogger('').addHandler(_file_handler)
145
156
 
 
157
        import bzrlib
 
158
        
 
159
        debug('bzr %s invoked on python %s (%s)'
 
160
              % (bzrlib.__version__,
 
161
                 '.'.join(map(str, sys.version_info)),
 
162
                 sys.platform))
 
163
 
 
164
        debug('  arguments: %r' % argv)
 
165
        debug('  working dir: ' + os.getcwdu())
146
166
    except IOError, e:
147
167
        warning("failed to open trace file: %s" % (e))
148
168
 
149
169
 
150
 
def log_startup(argv):
151
 
    import bzrlib
152
 
 
153
 
    debug('bzr %s invoked on python %s (%s)',
154
 
          bzrlib.__version__,
155
 
          '.'.join(map(str, sys.version_info)),
156
 
          sys.platform)
157
 
 
158
 
    debug('  arguments: %r', argv)
159
 
    debug('  working dir: %s', os.getcwdu())
160
 
 
161
170
 
162
171
def log_exception(msg=None):
163
172
    """Log the last exception into the trace file.
167
176
    """
168
177
    if msg == None:
169
178
        ei = sys.exc_info()
170
 
        msg = str(ei[1])
171
 
 
172
 
    if msg and (msg[-1] == '\n'):
173
 
        msg = msg[:-1]
 
179
        s = str(ei[1])
 
180
        if s[-1] == '\n':
 
181
            s = s[:-1]
 
182
        msg = s
174
183
        
175
184
    _bzr_logger.exception(msg)
176
 
 
177
 
 
178
 
 
179
 
def enable_default_logging():
180
 
    """Configure default logging to stderr and .bzr.log"""
181
 
    global _stderr_handler, _file_handler
182
 
 
183
 
    _stderr_handler = logging.StreamHandler()
184
 
 
185
 
    if not _file_handler:
186
 
        open_tracefile()                # also adds it
187
 
 
188
 
    debug_flag = False
189
 
    try:
190
 
        debug_flag = bool(os.environ['BZR_DEBUG'])
191
 
    except:
192
 
        pass
193
 
        
194
 
    if debug_flag:
195
 
        level = logging.DEBUG
196
 
    else:
197
 
        level = logging.INFO
198
 
        # show only summary of exceptions
199
 
        _stderr_handler.setFormatter(QuietFormatter())
200
 
 
201
 
    _stderr_handler.setLevel(level)
202
 
    _file_handler.setLevel(level)
203
 
 
204
 
    logging.getLogger('').addHandler(_stderr_handler)
205
 
 
206
 
 
207
 
 
208
 
def disable_default_logging():
209
 
    """Turn off default log handlers.
210
 
 
211
 
    This is intended to be used by the test framework, which doesn't
212
 
    want leakage from the code-under-test into the main logs.
213
 
    """
214
 
 
215
 
    l = logging.getLogger('')
216
 
    l.removeHandler(_stderr_handler)
217
 
    if _file_handler:
218
 
        l.removeHandler(_file_handler)