I want logger to log everything to file but only debug messages to console. This answer suggests creating custom handler. I tried following:
import logging
import sys
class DebugConsoleHandler(logging.StreamHandler):
def __init__(self):
super().__init__(stream = sys.stdout)
def emit(self, record):
if not record.levelno == logging.DEBUG:
return
super().emit(record)
class Module1():
def __init__(self) -> None:
self.logFilePath = 'logging_exp.txt'
self.configureLogger()
def configureLogger(self):
self.logger = logging.getLogger(__name__)
# log time and message to file
formatter1 = logging.Formatter("%(asctime)s %(levelname)s %(message)s")
file_hander = logging.FileHandler(self.logFilePath)
file_hander.setLevel(logging.INFO)
file_hander.setFormatter(formatter1)
# log only message to console
formatter2 = logging.Formatter("%(levelname)s %(message)s")
console_handler = DebugConsoleHandler()
console_handler.setFormatter(formatter2)
self.logger.addHandler(file_hander)
self.logger.addHandler(console_handler)
def testLogging(self):
a = 5
self.logger.info('Starting up ...')
self.logger.debug('a:%s', a)
m = Module1()
m.testLogging()
This only created file logging_expt.txt
, but did not log anything to anywhere, neither to file nor to console. What I am missing?