BEPP
BEPP

Reputation: 955

how to modify python LoggerAdapter

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

Answers (1)

Harion
Harion

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

Related Questions