You can just add a name as a keyword like in the example here in Logging Cookbook
Here your Module / file
The 'filename' 'spam_application.auxiliary'
import logging
import sys
# create logger
MODULE_NAME = 'spam_application.auxiliary' # Keyword of the file / Module
module_logger = logging.getLogger(MODULE_NAME)
class Auxiliary:
class_name = 'spam_application.auxiliary.Auxiliary' # Class name
def __init__(self):
module_logger.info('creating an instance of Auxiliary')
self.logger = self.set_up_config()
self.logger.info('instance of Auxiliary initialized!')
def do_something(self):
self.logger.info('doing something')
a = 1 + 1
self.logger.info('done doing something')
def set_up_config(self):
logger = logging.getLogger(self.class_name)
format = '%(asctime)s %(levelname)s %(name)s: %(message)s ' # Set up the asctime
FORMATTER = logging.Formatter(format)
stream_handler = logging.StreamHandler(sys.stdout) # Using sys.stdout
stream_handler.terminator = '\n=====================================================\n'
stream_handler.setLevel(logging.INFO)
stream_handler.setFormatter(FORMATTER)
logger.addHandler(stream_handler)
return logger
def some_function():
module_logger.info('received a call to "some_function"')
Parent module / Child as per documentation
import logging
import auxiliary_module
# create logger with 'spam_application'
logger = logging.getLogger('spam_application')
logger.setLevel(logging.INFO)
# create file handler which logs even debug messages
fh = logging.FileHandler('spam.log')
fh.setLevel(logging.INFO)
# create console handler with a higher log level
ch = logging.StreamHandler()
ch.setLevel(logging.INFO)
# create formatter and add it to the handlers
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
ch.setFormatter(formatter)
# add the handlers to the logger
logger.addHandler(fh)
logger.addHandler(ch)
logger.info('creating an instance of auxiliary_module.Auxiliary')
a = auxiliary_module.Auxiliary()
logger.info('created an instance of auxiliary_module.Auxiliary')
logger.info('calling auxiliary_module.Auxiliary.do_something')
a.do_something()
logger.info('finished auxiliary_module.Auxiliary.do_something')
logger.info('calling auxiliary_module.some_function()')
auxiliary_module.some_function()
logger.info('done with auxiliary_module.some_function()')
## Calling the logger from another module ##
import logging
import auxiliary_module
a = auxiliary_module.Auxiliary()
aux_module = logging.getLogger('spam_application.auxiliary.Auxiliary')
aux_module.setLevel(logging.INFO)
aux_module.info("Hey")
# 2021-11-10 21:18:04,376 INFO spam_application.auxiliary.Auxiliary: Hey
# =====================================================
Most simple way to config logger
import logging
format = '%(asctime)s %(levelname)s %(name)s: %(message)s '
logging.basicConfig(
level=logging.INFO,
format= format,
datefmt='%H:%M:%S'
)
_logger = logging.getLogger('MY_MODULE_NAME')
_logger.info("Here a log")
Output
>>> 20:55:12 INFO __main__: Hello WOrld
Using StreamerHandler
Needed to register a different logger
import logging
import sys
_logger = logging.getLogger('MY_MODULE_NAME')
_logger.setLevel(logging.DEBUG)
# Streamer Registartion
format = '%(asctime)s %(levelname)s %(name)s: %(message)s '
FORMATTER = logging.Formatter(format)
stream_handler = logging.StreamHandler(sys.stdout) # Using sys.stdout
stream_handler.terminator = '\n====================================================='
stream_handler.setLevel(logging.INFO)
stream_handler.setFormatter(FORMATTER)
_logger.addHandler(stream_handler)
_logger.info("Here a log")
Same but with a separate streamar
Useful to retrieve some other logs later on. same method can be used to write to a log file
import logging
import sys
import io
_logger = logging.getLogger('MY_MODULE_NAME')
_logger.setLevel(logging.DEBUG)
# Streamer Registartion
format = '%(asctime)s %(levelname)s %(name)s: %(message)s '
FORMATTER = logging.Formatter(format)
stream_handler = logging.StreamHandler(sys.stdout) # Using sys.stdout
stream_handler.terminator = '\n====================================================='
stream_handler.setLevel(logging.INFO)
stream_handler.setFormatter(FORMATTER)
_logger.addHandler(stream_handler)
# Add to a streamer
streamer = io.StringIO()
format = '%(asctime)s %(levelname)s %(name)s: %(message)s '
FORMATTER = logging.Formatter(format)
stream_handler = logging.StreamHandler(stream=streamer) # We use stringio
stream_handler.terminator = '\n*******************************************************'
stream_handler.setLevel(logging.INFO)
stream_handler.setFormatter(FORMATTER)
_logger.addHandler(stream_handler)
_logger.info("Here a log")
# Get All logged valued from streamer
steramed_values = streamer.getvalue()
print(f'steramed_values --> \n{steramed_values}')
# 2021-11-10 21:02:15,492 INFO __main__: Here a log
# =====================================================steramed_values -->
# 2021-11-10 21:02:15,492 INFO __main__: Here a log
# *******************************************************
Related Topic / Documentation