user3014653
user3014653

Reputation: 765

Getting rid of string padding in log messages

I'm using a logging filter to print out my log messages including some custom fields that are not present in the usual logging framework.

For instance:

class NISARLogger(object):

    def __init__(self, filename):
        self.filename = filename

        fid = logging.FileHandler(filename)
        formatter_str = '%(asctime)s, %(levelname)s, %(pge)s, %(module)s, %(error_code)i, \
                         %(source)s:%(line_number)i, "%(error_name)s: %(message)s"'
        formatter = logging.Formatter(formatter_str)
        fid.setFormatter(formatter)

        self.logger = logging.getLogger(name="NISAR")
        self.logger.setLevel(logging.DEBUG)
        self.logger.addHandler(fid)

    def log_message(self, class_filter, message):

        xfilter = class_filter()
        log_funct = getattr(self.logger, xfilter.level)
        
        self.logger.addFilter(xfilter)
        log_funct(message)

    def close(self):
        logging.shutdown()

Everything seems to be working fine except my log looks like this:

2020-08-18 14:41:07,431, INFO, QA, misc, 100000,                           '../verify_rslc.py':70, "N/A: Opening file L_JOINT_00213_LINE12_RUN1_FP_12122019134617.h5 with xml spec /Users/cmoroney/Desktop/working/NISAR/src/GitHub/QualityAssurance/xml/nisar_L1_SLC.xml"
2020-08-18 14:41:07,432, INFO, QA, misc, 100000,                           '/Users/cmoroney/Desktop/working/NISAR/src/GitHub/QualityAssurance/quality/SLCFile.py':28, "N/A: Opening file L_JOINT_00213_LINE12_RUN1_FP_12122019134617.h5"

where there's a lot of padding between the '100000' (error code parameter) and the filename (source parameter) both of which are extra parameters passed into the logger via the 'addFilter' call. I've tried experimenting with the length of the 'source' and 'error_code' fields in the formatter_str variable but no luck. Any idea where that padding is coming from?

Upvotes: 1

Views: 155

Answers (1)

alani
alani

Reputation: 13079

The extra space is coming from the whitespace in the source code itself at the start of the second line.

        formatter_str = '%(asctime)s, %(levelname)s, %(pge)s, %(module)s, %(error_code)i, \
                         %(source)s:%(line_number)i, "%(error_name)s: %(message)s"'

Try this instead:

        formatter_str = ('%(asctime)s, %(levelname)s, %(pge)s, %(module)s, %(error_code)i, '
                         '%(source)s:%(line_number)i, "%(error_name)s: %(message)s"')

Upvotes: 1

Related Questions