import logging
logging.basicConfig(level=logging.DEBUG)
# logging.basicConfig(filename='app.log', filemode='w', format='%(name)s - %(levelname)s - %(message)s')
logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
#!/usr/bin/env python
import logging
logging.basicConfig(filename='test.log', format='%(filename)s: %(message)s',
level=logging.DEBUG)
logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
# Note: Only levels on or above the current chosen level are outputted
Logging Levels -> Numeric Value
CRITICAL -> 50
ERROR -> 40
WARNING -> 30
INFO -> 20
DEBUG -> 10
NOTSET -> 0
# Example usage:
# For now, this is how I like to set up logging in Python:
import logging
# instantiate the root (parent) logger object (this is what gets called
# to create log messages)
root_logger = logging.getLogger()
# remove the default StreamHandler which isn't formatted well
root_logger.handlers = []
# set the lowest-severity log message to be included by the root_logger (this
# doesn't need to be set for each of the handlers that are added to the
# root_logger later because handlers inherit the logging level of their parent
# if their level is left unspecified. The root logger uses WARNING by default
root_logger.setLevel(logging.INFO)
# create the file_handler, which controls log messages which will be written
# to a log file (the default write mode is append)
file_handler = logging.FileHandler('/path/to/logfile.log')
# create the console_handler (which enables log messages to be sent to stdout)
console_handler = logging.StreamHandler()
# create the formatter, which controls the format of the log messages
# I like this format which includes the following information:
# 2022-04-01 14:03:03,446 - script_name.py - function_name - Line: 461 - INFO - Log message.
formatter = logging.Formatter('%(asctime)s - %(filename)s - %(funcName)s - Line: %(lineno)d - %(levelname)s - %(message)s')
# add the formatter to the handlers so they get formatted as desired
file_handler.setFormatter(formatter)
console_handler.setFormatter(formatter)
# set the severity level of the console_hander to ERROR so that only messages
# of severity ERROR or higher are printed to the console
console_handler.setLevel(logging.ERROR)
# add the handlers to the root_logger
root_logger.addHandler(file_handler)
root_logger.addHandler(console_handler)
# given the above setup
# running this line will append the info message to the /path/to/logfile.log
# but won't print to the console
root_logger.INFO("A casual message.")
# running this line will append the error message to the /path/to/logfile.log
# and will print it to the console
root_logger.ERROR("A serious issue!")
# simple logging example
import logging
level = logging.DEBUG
logging_format = "[%(levelname)s] %(asctime)s - %(message)s"
logging.basicConfig(level = level, format=logging_format)
def print_vs_logging():
logging.debug("What is the value of this variable")
logging.info("Just FYI")
logging.error("We found the error")
print_vs_logging()
# importing module
import logging
# Create and configure logger
logging.basicConfig(filename="newfile.log",
format='%(asctime)s %(message)s',
filemode='w')
# Creating an object
logger = logging.getLogger()
# Setting the threshold of logger to DEBUG
logger.setLevel(logging.DEBUG)
# Test messages
logger.debug("Harmless debug Message")
logger.info("Just an information")
logger.warning("Its a Warning")
logger.error("Did you try to divide by zero")
logger.critical("Internet is down")
# python logging level
Level: NOTSET > DEBUG > INFO > WARNING > ERROR > CRITICAL
Value: 0 > 10 > 20 > 30 > 40 > 50
Logger.setLevel() specifies the lowest-severity log message a logger will
handle, where debug is the lowest built-in severity level and critical is
the highest built-in severity.
For example, if the severity level is INFO, the logger will handle only INFO,
WARNING, ERROR, and CRITICAL messages and will ignore DEBUG messages.
# can be done by using unittest's assertLogs
from unittest import TestCase
class MyTest(TestCase):
def test_logs(self):
with self.assertLogs('foo', level='INFO') as cm:
logging.getLogger('foo').info('first message')
logging.getLogger('foo.bar').error('second message')
self.assertEqual(cm.output, ['INFO:foo:first message',
'ERROR:foo.bar:second message'])
import logging
#Create and configure logger using the basicConfig() function
logging.basicConfig(filename="newfile.log",
format='%(asctime)s %(message)s',
filemode='w')
#Creating an object of the logging
logger=logging.getLogger()
#Setting the threshold of logger to DEBUG
logger.setLevel(logging.DEBUG)
#Test messages
logger.debug("This is a harmless debug Message")
logger.info("This is just an information")
logger.warning("It is a Warning. Please make changes")
logger.error("You are trying to divide by zero")
logger.critical("Internet is down")