class_docstr: This class appends request context to logged messages.
class_docstr_tok: ["This","class","appends","request","context","to","logged","messages","."]
code: def _log_context_info(self):
      if not self.log_request_context:
          return
  
      context = f"Call ID: {self.call_id}"
  
      if self.remote_ip is not None:
          context += f", Caller: {self.remote_ip}"
  
      if self.method is not None:
          context += f", Method: {self.method}"
  
      if self.url is not None:
          context += f", URL: {self.url}"
  
      if self.client is not None:
          context += f", Client: {self.client}"
  
      if self.tableau_username is not None:
          context += f", Tableau user: {self.tableau_username}"
  
      if self.tabpy_username is not None:
          context += f", TabPy user: {self.tabpy_username}"
  
      logging.getLogger(__name__).log(logging.INFO, context)
      self.request_context_logged = True
  
imports: import base64
  import binascii
  import concurrent
  import json
  import logging
  import tornado.web
  from tabpy.tabpy_server.app.app_parameters import SettingsParameters
  from tabpy.tabpy_server.handlers.util import hash_password
  from tabpy.tabpy_server.handlers.util import AuthErrorStates
  import uuid
label_desc: Use image node_id 6 for calling the ContextLoggerWrapper obj's underlying member method code with example usage: obj._log_context_info() without return types