Skip to content

Commit 72cb512

Browse files
fix: route logging to stdout and simplify INFO format
- Route all DataJoint logs to stdout instead of stderr (avoids red highlighting in terminals/IDEs that color stderr) - Simplify INFO/DEBUG format: remove level tag for cleaner output - Keep [WARNING] and [ERROR] tags for actual issues Before: [2026-01-27 10:30:45,123][INFO]: DataJoint 2.0.0 connected to... After: [2026-01-27 10:30:45] DataJoint 2.0.0 connected to... [2026-01-27 10:31:02][WARNING]: Table xyz not found Users needing stderr can configure their own handlers. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent c41dfac commit 72cb512

1 file changed

Lines changed: 15 additions & 3 deletions

File tree

src/datajoint/logging.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,22 @@
66

77
log_level = os.getenv("DJ_LOG_LEVEL", "info").upper()
88

9-
log_format = logging.Formatter("[%(asctime)s][%(levelname)s]: %(message)s")
109

11-
stream_handler = logging.StreamHandler() # default handler
12-
stream_handler.setFormatter(log_format)
10+
class LevelAwareFormatter(logging.Formatter):
11+
"""Format INFO messages cleanly, show level for warnings/errors."""
12+
13+
def format(self, record):
14+
timestamp = self.formatTime(record, "%Y-%m-%d %H:%M:%S")
15+
if record.levelno >= logging.WARNING:
16+
return f"[{timestamp}][{record.levelname}]: {record.getMessage()}"
17+
else:
18+
return f"[{timestamp}] {record.getMessage()}"
19+
20+
21+
# Use stdout for all logging (avoids red highlighting in terminals/IDEs)
22+
# Users needing stderr can configure their own handlers
23+
stream_handler = logging.StreamHandler(sys.stdout)
24+
stream_handler.setFormatter(LevelAwareFormatter())
1325

1426
logger.setLevel(level=log_level)
1527
logger.handlers = [stream_handler]

0 commit comments

Comments
 (0)