-
Notifications
You must be signed in to change notification settings - Fork 143
Closed
Description
It seems that the logger created using the make_logger
helper requires an additional logger.setLevel('DEBUG')
to properly log messages below the warning level.
You can verify this by running the following code, which currently only displays the warning message.
To fix this, simply add root.setLevel(10)
before return root
in make_logger
, and it will work as expected!
import logging
import os
import sys
def make_logger(name, loggers_info):
"""
Abstraction layer for logging. Example usage:
from py4web.server_adapters.logging_utils import make_logger
loggers_info = [
"warning:warning.log",
"info:info.log",
"debug:debug.log:$(asctime)s > %(levelname)s > %(message)s",
]
logger = make_logger("py4web:appname", loggers_info)
"""
default_formatter = (
"%(asctime)s - %(levelname)s - %(filename)s:%(lineno)d - %(message)s"
)
# Reset loggers
root = logging.getLogger(name)
list(map(root.removeHandler, root.handlers))
list(map(root.removeFilter, root.filters))
for logger in loggers_info:
logger += ":stderr" if logger.count(":") == 0 else ""
logger += ":" if logger.count(":") == 1 else ""
level, filename, formatter = logger.split(":", 2)
if not formatter:
formatter = default_formatter
handler = (
logging.StreamHandler(getattr(sys, filename))
if filename in ("stdout", "stderr")
else logging.FileHandler(filename)
)
handler.setFormatter(logging.Formatter(formatter))
handler.setLevel(getattr(logging, level.upper(), "DEBUG"))
root.addHandler(handler)
root.setLevel(10) # Ensure all log levels are captured
return root
THIS_FILE_NAME = os.path.splitext(os.path.basename(__file__))[0]
THIS_FILE_PATH, THIS_FILE_FULL_NAME = os.path.split(__file__)
THIS_FILE_NAME, _ = os.path.splitext(THIS_FILE_FULL_NAME)
LOG_FILE = os.path.join(THIS_FILE_PATH, f'{THIS_FILE_NAME}.log')
LOGGERS = [
"debug:stdout",
] # Syntax: "severity:filename:format", where filename can be stderr or stdout
logger = make_logger(f'script:{THIS_FILE_NAME}', LOGGERS)
logger.debug('Debugging') # This won't appear without root.setLevel(10)
logger.warning("It's a warning!")
Let me know if you'd like any further refinements!
Metadata
Metadata
Assignees
Labels
No labels