1 # Copyright 2017 The Chromium Authors. All rights reserved. 2 # Use of this source code is governed by a BSD-style license that can be 3 # found in the LICENSE file. 4 5 import logging 6 import sys 7 import time 8 9 10 def AddLoggingArguments(parser): 11 parser.add_argument( 12 '-v', '--verbose', action='count', default=0, 13 help='Log more. Use multiple times for even more logging.') 14 15 16 def InitializeLogging(args, handler=None): 17 if args.verbose == 0: 18 log_level = logging.WARNING 19 elif args.verbose == 1: 20 log_level = logging.INFO 21 else: 22 log_level = logging.DEBUG 23 logger = logging.getLogger() 24 logger.setLevel(log_level) 25 if not handler: 26 handler = logging.StreamHandler(sys.stdout) 27 handler.setFormatter(CustomFormatter()) 28 logger.addHandler(handler) 29 30 31 class CustomFormatter(logging.Formatter): 32 """Custom log formatter.""" 33 34 # override 35 def __init__(self, fmt='%(threadName)-4s %(message)s'): 36 # Can't use super() because in older Python versions logging.Formatter does 37 # not inherit from object. 38 logging.Formatter.__init__(self, fmt=fmt) 39 self._creation_time = time.time() 40 41 # override 42 def format(self, record): 43 # Can't use super() because in older Python versions logging.Formatter does 44 # not inherit from object. 45 msg = logging.Formatter.format(self, record) 46 if 'MainThread' in msg[:19]: 47 msg = msg.replace('MainThread', 'Main', 1) 48 timediff = time.time() - self._creation_time 49 return '%s %8.3fs %s' % (record.levelname[0], timediff, msg) 50 51