Create app.py
Browse files
app.py
ADDED
@@ -0,0 +1,58 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import logging
|
2 |
+
|
3 |
+
import streamlit as st
|
4 |
+
from streamlit import runtime
|
5 |
+
from streamlit.runtime.scriptrunner import get_script_run_ctx
|
6 |
+
|
7 |
+
def get_remote_ip() -> str:
|
8 |
+
"""Get remote ip."""
|
9 |
+
|
10 |
+
try:
|
11 |
+
ctx = get_script_run_ctx()
|
12 |
+
if ctx is None:
|
13 |
+
return None
|
14 |
+
|
15 |
+
session_info = runtime.get_instance().get_client(ctx.session_id)
|
16 |
+
if session_info is None:
|
17 |
+
return None
|
18 |
+
except Exception as e:
|
19 |
+
return None
|
20 |
+
|
21 |
+
return session_info.request.remote_ip
|
22 |
+
|
23 |
+
class ContextFilter(logging.Filter):
|
24 |
+
def filter(self, record):
|
25 |
+
record.user_ip = get_remote_ip()
|
26 |
+
return super().filter(record)
|
27 |
+
|
28 |
+
def init_logging():
|
29 |
+
# Make sure to instanciate the logger only once
|
30 |
+
# otherwise, it will create a StreamHandler at every run
|
31 |
+
# and duplicate the messages
|
32 |
+
|
33 |
+
# create a custom logger
|
34 |
+
logger = logging.getLogger("foobar")
|
35 |
+
if logger.handlers: # logger is already setup, don't setup again
|
36 |
+
return
|
37 |
+
logger.propagate = False
|
38 |
+
logger.setLevel(logging.INFO)
|
39 |
+
# in the formatter, use the variable "user_ip"
|
40 |
+
formatter = logging.Formatter("%(name)s %(asctime)s %(levelname)s [user_ip=%(user_ip)s] - %(message)s")
|
41 |
+
handler = logging.StreamHandler()
|
42 |
+
handler.setLevel(logging.INFO)
|
43 |
+
handler.addFilter(ContextFilter())
|
44 |
+
handler.setFormatter(formatter)
|
45 |
+
logger.addHandler(handler)
|
46 |
+
|
47 |
+
def main():
|
48 |
+
logger.info("Inside main")
|
49 |
+
st.title("Title")
|
50 |
+
|
51 |
+
text = st.sidebar.text_input("Text:")
|
52 |
+
logger.info(f"This is the text: {text}")
|
53 |
+
|
54 |
+
if __name__ == "__main__":
|
55 |
+
init_logging()
|
56 |
+
|
57 |
+
logger = logging.getLogger("foobar")
|
58 |
+
main()
|