import logging # import request import streamlit as st from streamlit import runtime from streamlit.runtime.scriptrunner import get_script_run_ctx # def get_remote_ip() -> str: # # """Get remote ip.""" # # try: # # ctx = get_script_run_ctx() # # if ctx is None: # # return None # # session_info = runtime.get_instance().get_client(ctx.session_id) # # if session_info is None: # # return None # # except Exception as e: # # return None # return getpass.getuser() import subprocess def get_remote_ip(): try: result = subprocess.run(['whoami'], capture_output=True, text=True) username = result.stdout.strip() return username except Exception as e: return str(e) # Example usage st.write(get_remote_ip()) class ContextFilter(logging.Filter): def filter(self, record): record.user_ip = get_remote_ip() return super().filter(record) def init_logging(): # Make sure to instanciate the logger only once # otherwise, it will create a StreamHandler at every run # and duplicate the messages # create a custom logger logger = logging.getLogger("foobar") if logger.handlers: # logger is already setup, don't setup again return logger.propagate = False logger.setLevel(logging.INFO) # in the formatter, use the variable "user_ip" formatter = logging.Formatter("%(name)s %(asctime)s %(levelname)s [user_ip=%(user_ip)s] - %(message)s") handler = logging.StreamHandler() handler.setLevel(logging.INFO) handler.addFilter(ContextFilter()) handler.setFormatter(formatter) logger.addHandler(handler) def main(): logger.info("Inside main") st.title("Title") text = st.sidebar.text_input("Text:") logger.info(f"This is the text: {text}") if __name__ == "__main__": init_logging() logger = logging.getLogger("foobar") main()