Reputation: 955
I am trying to modify the log context in python using LoggerAdapter. First time it set to "PRE_SYSTEM_BOOT". But subsequent modification with the context is not taking effect. Can someone explain why the context string change not taking effect ?
import logging
extra = {'proc_context': 'PRE_SYSTEM_BOOT'}
def get_logger():
format_str="%(proc_context)s: %(message)s"
logging.basicConfig(level=logging.DEBUG, format=format_str)
logger = logging.getLogger(__name__)
logger = logging.LoggerAdapter(logger, extra)
return logger
if __name__ == "__main__":
logger = get_logger()
logging.LoggerAdapter(logger, extra)
# preboot
logger.debug("init context")
# boot
extra = {'proc_context': 'SYSTEM_BOOT'}
logger = logging.LoggerAdapter(logger, extra)
logger.debug("system contex")
extra = {'proc_context': 'SYSTEM_POST_BOOT'}
logger = logging.LoggerAdapter(logger, extra)
#post boot
logger.debug("system booted")
Output:
root@ubuntu-~# python python_log.py
PRE_SYSTEM_BOOT: init context
PRE_SYSTEM_BOOT: system contex
PRE_SYSTEM_BOOT: system booted
root@ubuntu-s-1vcpu-1gb-blr1-01:~#
Expected:
PRE_SYSTEM_BOOT: init context
SYSTEM_BOOT: system contex
POST_SYSTEM_BOOT: system booted
Upvotes: 0
Views: 1978
Reputation: 225
You need to get logger instance before set logger adapter:
import logging
extra = {'proc_context': 'PRE_SYSTEM_BOOT'}
def get_logger():
format_str="%(proc_context)s: %(message)s"
logging.basicConfig(level=logging.DEBUG, format=format_str)
logger = logging.getLogger(__name__)
logger = logging.LoggerAdapter(logger, extra)
return logger
if __name__ == "__main__":
logger = get_logger()
# preboot
logger.debug("init context")
# boot
logger = logging.getLogger(__name__)
extra = {'proc_context': 'SYSTEM_BOOT'}
logger = logging.LoggerAdapter(logger, extra)
logger.debug("system contex")
logger = logging.getLogger(__name__)
extra = {'proc_context': 'SYSTEM_POST_BOOT'}
logger = logging.LoggerAdapter(logger, extra)
#post boot
logger.debug("system booted")
Upvotes: 1