Dynamically Change Logging Level of a Python Process The intention of following code is to dynamically change the logging level of a running python process that has imported this module.

#!/usr/bin/python
import logging
import time
import signal

logging.basicConfig(level=logging.ERROR)
logger = logging.getLogger(__name__)
# create logger object with 'ERROR' level logging.

def handler1(signum, frame):
    logger.setLevel(logging.DEBUG)

def handler2(signum, frame):
    logger.setLevel(logging.INFO)

signal.signal(signal.SIGUSR1, handler1)
# if process receives SIGUSR1 signal, the logging level changes to DEBUG.

signal.signal(signal.SIGUSR2, handler2)
# if process receives SIGUSR1 signal, the logging level changes to INFO.

while True:
    logger.info('info logging')
    logger.debug('debug logging')
    logger.error('error logging')
    logger.warn('warn logging')
    time.sleep(2)


The above script runs as expected but I am not sure if this the right way to full fill the goal. Please review the code, as well as issues in above resolution.
Logger.setLevel() is the right way to dynamically change the logging level of a Logger object. Your script will work fine.

I'll nitpick:


Code is read from top to bottom. You should place the comments above the group of statements they are attached to, not below them. If the reader reads the comment first, they won't have to spend extra effort to decipher the meaning of the following lines, because they have read the annotation first.
Be wary of using asynchronous signal handlers when you are using the logging module. I know that this is a tiny example script, but always refer to the documentation when you are using the Python standard library.