~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/trace.py

  • Committer: Robert Collins
  • Date: 2010-06-26 01:07:16 UTC
  • mto: This revision was merged to the branch mainline in revision 5324.
  • Revision ID: robertc@robertcollins.net-20100626010716-jowzrldm4ntsaki2
Make bzrlib startup use a trace context manager.

Show diffs side-by-side

added added

removed removed

Lines of Context:
306
306
    logging.getLogger("bzr").
307
307
 
308
308
    Output can be redirected away by calling _push_log_file.
 
309
 
 
310
    :return: A memento from push_log_file for restoring the log state.
309
311
    """
310
312
    start_time = osutils.format_local_date(_bzr_log_start_time,
311
313
                                           timezone='local')
313
315
    bzr_log_file = _open_bzr_log()
314
316
    if bzr_log_file is not None:
315
317
        bzr_log_file.write(start_time.encode('utf-8') + '\n')
316
 
    push_log_file(bzr_log_file,
 
318
    memento = push_log_file(bzr_log_file,
317
319
        r'[%(process)5d] %(asctime)s.%(msecs)03d %(levelname)s: %(message)s',
318
320
        r'%Y-%m-%d %H:%M:%S')
319
321
    # after hooking output into bzr_log, we also need to attach a stderr
324
326
    stderr_handler = logging.StreamHandler(encoded_stderr)
325
327
    stderr_handler.setLevel(logging.INFO)
326
328
    logging.getLogger('bzr').addHandler(stderr_handler)
 
329
    return memento
327
330
 
328
331
 
329
332
def push_log_file(to_file, log_format=None, date_format=None):
555
558
    global _trace_file
556
559
    if _trace_file:
557
560
        _trace_file.flush()
 
561
 
 
562
 
 
563
class Config(object):
 
564
    """Configuration of message tracing in bzrlib.
 
565
 
 
566
    This implements the context manager protocol and should manage any global
 
567
    variables still used. The default config used is DefaultConfig, but
 
568
    embedded uses of bzrlib may wish to use a custom manager.
 
569
    """
 
570
 
 
571
    def __enter__(self):
 
572
        return self # This is bound to the 'as' clause in a with statement.
 
573
 
 
574
    def __exit__(self, exc_type, exc_val, exc_tb):
 
575
        return False # propogate exceptions.
 
576
 
 
577
 
 
578
class DefaultConfig(Config):
 
579
    """A default configuration for tracing of messages in bzrlib.
 
580
 
 
581
    This implements the context manager protocol.
 
582
    """
 
583
 
 
584
    def __enter__(self):
 
585
        self._original_filename = _bzr_log_filename
 
586
        self._original_state = enable_default_logging()
 
587
        return self # This is bound to the 'as' clause in a with statement.
 
588
 
 
589
    def __exit__(self, exc_type, exc_val, exc_tb):
 
590
        pop_log_file(self._original_state)
 
591
        global _bzr_log_filename
 
592
        _bzr_log_filename = self._original_filename
 
593
        return False # propogate exceptions.