test / app.py
robertselvam's picture
Update app.py
385c0fd verified
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()