Mar-08-2022, 09:19 PM
Thank you @deanhystad for your helpful reply. Following your suggestion I was able to figure out how I could do this.
Contents of module log_format.py
Contents of module log_format.py
import logging import datetime as dt class Formatter(logging.Formatter): converter=dt.datetime.fromtimestamp def formatTime(self, record, datefmt=None): ct = self.converter(record.created) if datefmt: s = ct.strftime(datefmt) else: t = ct.strftime("%Y-%m-%d %H:%M:%S") s = "%s,%03d" % (t, record.msecs) return s class ContextFilter(logging.Filter): # RUN 2 def __init__(self, i): # RUN 2 self.i = i # RUN 2 # RUN 2 def filter(self, record): # RUN 2 self.i += 1 # NEW LINE record.log_count = self.i # RUN 2 return True # RUN 2Contents of python script log_format_test.py
import os import sys import logging py_lib = os.environ.get('app_dir') + "/lib" sys.path.append(py_lib) import log_format as lf logger = logging.getLogger(__name__) l_level = 'INFO' #'DEBUG' #'INFO' l_level = eval("logging." + l_level.upper()) logger.setLevel(l_level) int_var = os.getpid() i = 0 str_var = os.path.basename(__file__) handler = logging.StreamHandler() handler.setLevel(l_level) lf_format = f'ZZZZZZZZ|%(asctime)s|{int_var}|%(log_count)s|{str_var}|%(message)s' formatter = lf.Formatter(fmt=lf_format, datefmt='%Y-%m-%d %H:%M:%S.%f') # 2022-02-22 16:42:44.289193 obj_filter = lf.ContextFilter(i) # NEW LINE logger.addFilter(lf.ContextFilter(obj_filter)) # CHANGED LINE handler.setFormatter(formatter) logger.addHandler(handler) logger.info("I am INFO 1") logger.info("I am INFO 2") logger.debug("I am DEBUG 3")This results in printing the log as expected and I don't even have to manually increment i every time.
ZZZZZZZZ|2022-02-24 11:41:19.578733|20527|1|log_format_test.py|I am INFO 1 ZZZZZZZZ|2022-02-24 11:41:19.578868|20527|2|log_format_test.py|I am INFO 2