-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdebug.py
More file actions
49 lines (40 loc) · 1.88 KB
/
Copy pathdebug.py
File metadata and controls
49 lines (40 loc) · 1.88 KB
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
import logging
import streamlit as st
from datetime import datetime
class StreamlitLogHandler(logging.Handler):
"""
یک Handler سفارشی که log ها را در Streamlit Session State ذخیره میکند
"""
def __init__(self):
super().__init__()
# ✅ اطمینان از وجود log_messages
self._ensure_log_storage()
def _ensure_log_storage(self):
"""اطمینان از وجود لیست log_messages در session_state"""
if 'log_messages' not in st.session_state:
st.session_state.log_messages = []
def emit(self, record):
"""
این متد هر بار که یک log جدید ایجاد میشود، اجرا میشود
record: شامل اطلاعات log (message, level, timestamp, ...)
"""
try:
# ✅ بررسی مجدد برای اطمینان (در صورت reset شدن session_state)
self._ensure_log_storage()
# Format کردن log message
log_entry = {
'timestamp': datetime.fromtimestamp(record.created).strftime('%Y-%m-%d %H:%M:%S'),
'level': record.levelname,
'logger': record.name,
'message': record.getMessage(),
'file': record.filename,
'line': record.lineno
}
# اضافه کردن به session_state
st.session_state.log_messages.append(log_entry)
# نگه داشتن فقط 200 log آخر
if len(st.session_state.log_messages) > 200:
st.session_state.log_messages = st.session_state.log_messages[-200:]
except Exception as e:
# اگر خطایی در خود handler رخ داد، چاپش کن
print(f"Error in StreamlitLogHandler: {e}")