Streamlit中的日志logging配置
streamlit作为一个便捷GUI和python代码非常适配,但是我直接用logging库遇到一些问题
首先是logging.basicConfig级别设置为debug时出现大量日志信息直接塞爆log文件,所以我只敢设置为info级别了
然后是streamlit的页面是会刷新的,所以代码容易重复执行,特别是用到addHandler方法时,容易发生terminal输出一次的信息重复在log中记录,而且重复次数递增,解决方法如下:
import streamlit
########## 配置日志 ##########
import logging
# 创建日志配置函数
def setup_logger():
if 'logger_configured' not in st.session_state:
log_format = '%(asctime)s - %(levelname)s - %(message)s'
formatter = logging.Formatter(log_format)
# 创建一个文件处理器,并赋予一个唯一的名称
file_handler = logging.FileHandler('st_log.log')
file_handler.setLevel(logging.INFO)
file_handler.setFormatter(formatter)
file_handler_name = 'streamlit_file_handler'
streamlit_root_logger = logging.getLogger(st.__name__)
# 检查处理器是否已经存在
if not any(handler.get_name() == file_handler_name for handler in streamlit_root_logger.handlers):
file_handler.set_name(file_handler_name)
streamlit_root_logger.addHandler(file_handler)
st.session_state['logger_configured'] = True
# 在应用启动时配置日志
setup_logger()
# 使用日志记录器
streamlit_root_logger = logging.getLogger(st.__name__)
streamlit_root_logger.info("enter st_main_and_segment page")
########## 配置日志结束 ##########