Streamlit terminating abruptly when logger.level is set to debug

You can comment every occurence of _LOGGER in browser_websocket_handler as a workaround. More specifically commenting this line lets you see “Hello world”

_LOGGER.debug("Received the following back message:\n%s", msg)

It seems it’s not safe to call _LOGGER inside the on_message callback. It also seems to be the case if you replace _LOGGER.debug("Received the following back message:\n%s", msg) with print(msg). The issue seems likely to be due to either trying to read msg or doing I/O inside on_message.

EDIT: It’s not due to I/O alone, reading the msg variable causes a crash, but otherwise it seems to be fine:

            #_LOGGER.debug("Received the following back message:\n%s", msg)
            _LOGGER.debug("Received the following back message:\n")
            print("Hello")

EDIT (Reproduction):

Trying to trigger a string representation __repr__ of BackMsg causes a crash. Here’s a reproduction:

from streamlit.proto.BackMsg_pb2 import BackMsg

print("Start")
BackMsg().__repr__() # Crashes
print("End")

However, commenting the first print still works:

from streamlit.proto.BackMsg_pb2 import BackMsg

#print("Start")
test = BackMsg().__repr__() #Does not crash
print("Test: ", test, "end") #Test:   end

Also happens with ButtonGroupProto used by st.feedback:

from streamlit.proto.ButtonGroup_pb2 import ButtonGroup as ButtonGroupProto

print("Start")
test = ButtonGroupProto().__repr__() # Crashes
print("Test: ", test, "end")