ignoring some default fields from SimpleJsonFormatter

David Raymond David.Raymond at tomtom.com
Tue Aug 21 12:38:34 EDT 2018


https://docs.python.org/3.7/library/logging.html#logging.Logger.debug
https://docs.python.org/3.7/library/logging.html#logging.Formatter.format


Basically your Formatter string doesn't include %(anotherfield1)s in it anywhere, so that gets ignored. To have a variable number of those in there you'd have to make a custom Formatter class where .format(record) looks for any "left over" keys in the given LogRecord's args, and adds them to the returned message as appropriate.

(Also note that you want 03d for msecs, not 06d)


import logging
import sys
fmt = '{"timestamp": "%(asctime)s.%(msecs)03d", "level":"%(levelname)s"' \
      ', "anottherfield1":"%(anotherfield1)s"}'
datefmt = "%Y-%m-%dT%H:%M:%S"
logging.basicConfig(stream = sys.stdout,
                    level = logging.DEBUG,
                    format = fmt,
                    datefmt = datefmt)
logging.info("my test message", extra = {"anotherfield1": "test"})


{"timestamp": "2018-08-21T12:20:35.475", "level":"INFO", "anottherfield1":"test"}




-----Original Message-----
From: Python-list [mailto:python-list-bounces+david.raymond=tomtom.com at python.org] On Behalf Of shradhattx at gmail.com
Sent: Tuesday, August 21, 2018 11:37 AM
To: python-list at python.org
Subject: ignoring some default fields from SimpleJsonFormatter

I am using for my logger

handler.setFormatter(SimpleJsonFormatter(json.dumps))

It had some default fields - timestamp, function, line_number, module, level

and flexibility to provide extra fields in json log with use of 

   logger.info("my test message", extra={"anotherfield1": "test"})

I am using decorator functions so some of the default fields provided ex- function, line_number, module are not useful as it gives information on decorator module, line_number. 
I like to remove some fields from being logged while retaining others, keeping also the use of "extra"

This is what I tried -
     logging.Formatter('{"timestamp": "%(asctime)s.%(msecs)06d", "level":"%(levelname)s"}',
                        '%Y-%m-%dT%H:%M:%S')

The problem is that it doesn't print the fields given in 'extra'


How do I accomplish this?
-- 
https://mail.python.org/mailman/listinfo/python-list


More information about the Python-list mailing list