File size: 1,954 Bytes
9c1f8dd
f0ddd3d
9c1f8dd
 
 
 
d8ce952
 
9c1f8dd
d8ce952
 
 
 
5e8ab35
d8ce952
 
 
 
 
cbc4a0d
d8ce952
cbc4a0d
2b08e0e
cbc4a0d
385c0fd
d8ce952
2b08e0e
 
d8ce952
 
 
 
 
385c0fd
d8ce952
9c1f8dd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
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()