55from .context .context_handler import get_thread_execution_context
66from .context .execution_context import ExecutionContext , ExecutionContextType
77
8- from .constants .logger import LoggerKeys , ContextConfig
8+ from .constants .logger import LoggerKeys , LoggerContextConfigKeys
99from .constants .context import ExecutionContextType
1010
1111class ContextFilter (logging .Filter ):
12+ """
13+ Log filter to extract the execution context from thread locals and populate it in the log record
14+ """
15+
1216 def filter (self , record ):
1317 execution_context : ExecutionContext = get_thread_execution_context ()
1418
@@ -21,15 +25,27 @@ def filter(self, record):
2125 setattr (record , key , '' )
2226 return True
2327
24- def initialise_console_logger (service_name , level = logging .WARNING , context_config = None ):
25- logger = logging .getLogger (service_name )
28+ def initialise_console_logger (logger_name , service_name , level = logging .WARNING , context_config = None ):
29+ """
30+ Initialises the logger with the handler, formatter and filter to log context data along with message
31+ in JSON format on the console.
32+
33+ Args:
34+ logger_name (string): Name of the logger to be initialised
35+ service_name (string): Service name that appears as the source in the logs
36+ level (int, optional): Log level. Defaults to logging.WARNING.
37+ context_config (dict, optional): Context config to configure logging parameters See LoggerContextConfigKeys for list of allowed params. Defaults to None.
38+
39+ Returns:
40+ Logger: Initialised logger
41+ """
42+ logger = logging .getLogger (logger_name )
2643
2744 # Create handlers
28- c_handler = logging .StreamHandler (sys .stdout )
45+ log_handler = logging .StreamHandler (sys .stdout )
2946
30- # Populate Context Filter in Record
3147 log_format = {
32- "source" : "%(name)s " ,
48+ "source" : f" { service_name } " ,
3349 "time" : "%(asctime)s" ,
3450 "log" : {
3551 "message" : "%(message)s"
@@ -40,23 +56,24 @@ def initialise_console_logger(service_name, level=logging.WARNING, context_confi
4056 if not context_config :
4157 context_config = {}
4258
43- if not context_config .get (ContextConfig .DISABLE_CID .value ):
59+ if not context_config .get (LoggerContextConfigKeys .DISABLE_CID .value ):
4460 log_format [LoggerKeys .CORRELATION_ID .value ] = f"%({ ExecutionContextType .CORRELATION_ID .value } )s"
4561
46- if not context_config .get (ContextConfig .DISABLE_TID .value ):
62+ if not context_config .get (LoggerContextConfigKeys .DISABLE_TID .value ):
4763 log_format [LoggerKeys .TENANT_ID .value ] = f"%({ ExecutionContextType .TENANT_ID .value } )s"
4864
49- if not context_config .get (ContextConfig .DISABLE_UID .value ):
65+ if not context_config .get (LoggerContextConfigKeys .DISABLE_UID .value ):
5066 log_format [LoggerKeys .USER_ID .value ] = f"%({ ExecutionContextType .USER_ID .value } )s"
5167
5268 # Create formatters and add it to handlers
53- c_format = logging .Formatter (json .dumps (log_format ), datefmt = '%Y-%m-%dT%H:%M:%S%z' )
69+ log_formatter = logging .Formatter (json .dumps (log_format ), datefmt = '%Y-%m-%dT%H:%M:%S%z' )
70+ log_handler .setFormatter (log_formatter )
71+
72+ # Populate Context Filter in Record
73+ log_handler .addFilter (ContextFilter ())
5474
55- c_handler .setFormatter (c_format )
56- c_handler .addFilter (ContextFilter ())
75+ logger .addHandler (log_handler )
5776
58- # Add handlers to the logger
59- logger .addHandler (c_handler )
6077 logger .setLevel (level )
6178
6279 return logger
0 commit comments