Skip to content

Commit 4887b5f

Browse files
author
Kareem Zidane
authored
Merge pull request #136 from cs50/logger
configure root logger
2 parents 87394fd + 7dd19ad commit 4887b5f

File tree

3 files changed

+31
-9
lines changed

3 files changed

+31
-9
lines changed

src/cs50/cs50.py

+27
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from __future__ import print_function
22

33
import inspect
4+
import logging
45
import os
56
import re
67
import sys
@@ -11,6 +12,32 @@
1112
from traceback import format_exception
1213

1314

15+
# Configure default logging handler and formatter
16+
# Prevent flask, werkzeug, etc from adding default handler
17+
logging.basicConfig(format="%(levelname)s: %(message)s", level=logging.DEBUG)
18+
19+
try:
20+
# Patch formatException
21+
logging.root.handlers[0].formatter.formatException = lambda exc_info: _formatException(*exc_info)
22+
except IndexError:
23+
pass
24+
25+
# Configure cs50 logger
26+
_logger = logging.getLogger("cs50")
27+
_logger.setLevel(logging.DEBUG)
28+
29+
# Log messages once
30+
_logger.propagate = False
31+
32+
handler = logging.StreamHandler()
33+
handler.setLevel(logging.DEBUG)
34+
35+
formatter = logging.Formatter("%(levelname)s: %(message)s")
36+
formatter.formatException = lambda exc_info: _formatException(*exc_info)
37+
handler.setFormatter(formatter)
38+
_logger.addHandler(handler)
39+
40+
1441
class _flushfile():
1542
"""
1643
Disable buffering for standard output and standard error.

src/cs50/flask.py

-2
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@ def _wrap_flask(f):
1212
if f.__version__ < StrictVersion("1.0"):
1313
return
1414

15-
f.logging.default_handler.formatter.formatException = lambda exc_info: _formatException(*exc_info)
16-
1715
if os.getenv("CS50_IDE_TYPE") == "online":
1816
from werkzeug.middleware.proxy_fix import ProxyFix
1917
_flask_init_before = f.Flask.__init__

src/cs50/sql.py

+4-7
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,6 @@ def __init__(self, url, **kwargs):
4545
import sqlalchemy
4646
import sqlite3
4747

48-
# Get logger
49-
self._logger = logging.getLogger("cs50")
50-
5148
# Require that file already exist for SQLite
5249
matches = re.search(r"^sqlite:///(.+)$", url)
5350
if matches:
@@ -59,6 +56,8 @@ def __init__(self, url, **kwargs):
5956
# Create engine, disabling SQLAlchemy's own autocommit mode, raising exception if back end's module not installed
6057
self._engine = sqlalchemy.create_engine(url, **kwargs).execution_options(autocommit=False)
6158

59+
self._logger = logging.getLogger("cs50")
60+
6261
# Listener for connections
6362
def connect(dbapi_connection, connection_record):
6463

@@ -78,13 +77,11 @@ def connect(dbapi_connection, connection_record):
7877
# Register listener
7978
sqlalchemy.event.listen(self._engine, "connect", connect)
8079

81-
# Log statements to standard error
82-
logging.basicConfig(level=logging.DEBUG)
8380

8481
# Test database
82+
disabled = self._logger.disabled
83+
self._logger.disabled = True
8584
try:
86-
disabled = self._logger.disabled
87-
self._logger.disabled = True
8885
self.execute("SELECT 1")
8986
except sqlalchemy.exc.OperationalError as e:
9087
e = RuntimeError(_parse_exception(e))

0 commit comments

Comments
 (0)