Python Logging Context

1. Description
import logging
from logging_context import get_logging_context, setup_logging_context
from logging_context.formatter import LoggingContextFormatter
logger = logging.getLogger("your_logger")
logger.setLevel(logging.INFO)
handler = logging.StreamHandler()
handler.setFormatter(LoggingContextFormatter("%(asctime)s - %(name)s - %(levelname)s - context=%(context)s - %(message)s"))
handler.setLevel(logging.INFO)
logger.addHandler(handler)
logger.info("before setup")
context = get_logging_context()
setup_logging_context(context)
logger.info("after setup")
context.set_value("var", 100)
logger.info("after set value")
context.set_value("var", 200)
logger.info("after change value")
context.delete_value("var")
logger.info("after delete value")
2. Installation
pip install logging-context
3. Usage
3.1 Setup logging record factory
Function setup_logging_context
will add a record.context
attribute into your log record.
If you don't run the function, logging can't found any attribute context
and raise KeyError
exception.
from logging_context import get_logging_context, setup_logging_context
context = get_logging_context()
setup_logging_context(context)
3.2 Setup logging format
Function setup_logging_context
will add a record.context
attribute into your log record.
You can add %(context)s
into your log format to show entire context values in your log
You should use LoggingContextFormatter
instead of default logging.Formatter
. LoggingContextFormatter
added record.context
to your log record by default.
context = get_logging_context()
context.set_value("var1", 200)
context.set_value("var2", "var2 value")
handler = logging.StreamHandler()
handler.setFormatter(LoggingContextFormatter("%(asctime)s - %(name)s - %(levelname)s - context=%(context)s - %(message)s"))
logger.addHandler(handler)
logger.info("log message")
3.3 Context object
Wherever you want to use context, you should call function get_logging_context
to get current context
from logging_context import get_logging_context
context = get_logging_context()
You can set/update/delete any context value and you can clear any values of your context
logger.info("before set value")
context.set_value("var1", 200)
context.set_value("var2", "var2 value")
logger.info("after set value")
context.set_value("var1", 100)
logger.info("after change value")
context.delete_value("var2")
logger.info("after delete value")
context.set_value("var1", 150)
context.set_value("var2", "var2 value")
context.clean()
logger.info("after clean")
Development
Clone this project and run following commands to setup environment
cd logging_context
make virtualenv
source .venv/bin/activate
make install