# Set up Arvados logging based on the user's configuration.
# All Arvados code should log under the arvados hierarchy.
+log_format = '%(asctime)s %(name)s[%(process)d] %(levelname)s: %(message)s'
+log_date_format = '%Y-%m-%d %H:%M:%S'
log_handler = logging.StreamHandler()
-log_handler.setFormatter(logging.Formatter(
- '%(asctime)s %(name)s[%(process)d] %(levelname)s: %(message)s',
- '%Y-%m-%d %H:%M:%S'))
+log_handler.setFormatter(logging.Formatter(log_format, log_date_format))
logger = logging.getLogger('arvados')
logger.addHandler(log_handler)
logger.setLevel(logging.DEBUG if config.get('ARVADOS_DEBUG')
super(FileUploadList, self).append(other)
+# Appends the X-Request-Id to the log message when log level is ERROR or DEBUG
+class ArvPutLogFormatter(logging.Formatter):
+ std_fmtr = logging.Formatter(arvados.log_format, arvados.log_date_format)
+ err_fmtr = None
+
+ def __init__(self, request_id):
+ self.err_fmtr = logging.Formatter(
+ arvados.log_format+' (X-Request-Id: {})'.format(request_id),
+ arvados.log_date_format)
+
+ def format(self, record):
+ if record.levelno in (logging.DEBUG, logging.ERROR):
+ return self.err_fmtr.format(record)
+ return self.std_fmtr.format(record)
+
+
class ResumeCache(object):
CACHE_DIR = '.cache/arvados/arv-put'
request_id = arvados.util.new_request_id()
logger.info('X-Request-Id: '+request_id)
+ formatter = ArvPutLogFormatter(request_id)
+ logging.getLogger('arvados').handlers[0].setFormatter(formatter)
+
if api_client is None:
api_client = arvados.api('v1', request_id=request_id)
self.main_stdout = tutil.StringIO()
self.main_stderr = tutil.StringIO()
self.loggingHandler = logging.StreamHandler(self.main_stderr)
- self.loggingHandler.setFormatter(logging.Formatter('%(levelname)s: %(message)s'))
+ self.loggingHandler.setFormatter(arv_put.ArvPutLogFormatter('req-testing123'))
logging.getLogger().addHandler(self.loggingHandler)
def tearDown(self):
self.assertLess(0, exc_test.exception.args[0])
self.assertLess(0, coll_save_mock.call_count)
self.assertEqual("", self.main_stdout.getvalue())
+ # Mock request id is added on log formatter at setUp
+ self.assertRegex(
+ self.main_stderr.getvalue(), r'\(X-Request-Id: req-testing123\)\n')
def test_request_id_logging(self):
matcher = r'INFO: X-Request-Id: req-[a-z0-9]{20}\n'