File size: 1,864 Bytes
9c1f8dd
94f9bd9
9c1f8dd
 
 
 
5e8ab35
 
9c1f8dd
5e8ab35
 
 
 
 
 
 
 
 
 
9c1f8dd
5e8ab35
 
 
 
 
9c1f8dd
5e8ab35
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
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 session_info.request.remote_ip
def get_remote_ip():
    try:
        ip = requests.get('https://api64.ipify.org').text
        return ip
    except Exception as e:
        st.error(f"Unable to get IP address: {e}")
        return None
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()