Syntrex Claude Sonnet 4.6 commited on
Commit
a2e183a
·
1 Parent(s): 9a44987

Fix logging: use basicConfig(force=True) to override Streamlit's WARNING-level root config

Browse files

Streamlit sets root logger level=WARNING before app.py executes. Our previous
if-not-handlers guard was skipped once Streamlit's server added its own handler,
leaving all INFO messages silently dropped. force=True removes existing handlers
and guarantees INFO+ output to stderr in HF Spaces logs.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

Files changed (1) hide show
  1. utils/logger.py +9 -11
utils/logger.py CHANGED
@@ -1,17 +1,15 @@
1
  import logging
2
  import sys
3
 
4
- _FMT = "[%(asctime)s] [%(levelname)s] %(name)s: %(message)s"
5
- _DATE_FMT = "%Y-%m-%d %H:%M:%S"
6
-
7
- # Configure root logger once so every module that calls
8
- # logging.getLogger(__name__) outputs to stdout (visible in HF Spaces logs).
9
- _root = logging.getLogger()
10
- if not _root.handlers:
11
- _handler = logging.StreamHandler(sys.stdout)
12
- _handler.setFormatter(logging.Formatter(_FMT, datefmt=_DATE_FMT))
13
- _root.addHandler(_handler)
14
- _root.setLevel(logging.INFO)
15
 
16
  # Named app logger for explicit imports (from utils.logger import logger)
17
  logger = logging.getLogger("kasper")
 
1
  import logging
2
  import sys
3
 
4
+ # force=True (Python 3.8+) removes any handlers already added by Streamlit's
5
+ # server startup before app.py loads, and guarantees our format + level win.
6
+ logging.basicConfig(
7
+ level=logging.INFO,
8
+ format="[%(asctime)s] [%(levelname)s] %(name)s: %(message)s",
9
+ datefmt="%Y-%m-%d %H:%M:%S",
10
+ stream=sys.stderr,
11
+ force=True,
12
+ )
 
 
13
 
14
  # Named app logger for explicit imports (from utils.logger import logger)
15
  logger = logging.getLogger("kasper")