Skip to content

Instantly share code, notes, and snippets.

@OblateSpheroid
Last active July 22, 2020 02:23
Show Gist options
  • Save OblateSpheroid/d35324340cd6017311bd65dfa271ed38 to your computer and use it in GitHub Desktop.
Save OblateSpheroid/d35324340cd6017311bd65dfa271ed38 to your computer and use it in GitHub Desktop.
import sys
import json
import logging
from logging.handlers import TimedRotatingFileHandler
from pythonjsonlogger import jsonlogger
STREAM_FORMATTER = logging.Formatter(
"%(asctime)s — %(name)s — %(levelname)s: %(message)s"
)
FORMAT_DICT = {
'time':'%(asctime)s',
'name': '%(name)s',
'level': '%(levelname)s',
}
FILE_FORMATTER = jsonlogger.JsonFormatter(json.dumps(FORMAT_DICT))
def get_console_handler():
console_handler = logging.StreamHandler(sys.stdout)
console_handler.setFormatter(STREAM_FORMATTER)
return console_handler
def get_file_handler(log_file):
file_handler = TimedRotatingFileHandler(log_file, when='midnight')
file_handler.setFormatter(FILE_FORMATTER)
return file_handler
def get_logger(logger_name, log_file=None, log_level=logging.DEBUG):
logger = logging.getLogger(logger_name)
logger.setLevel(log_level)
logger.addHandler(get_console_handler())
if log_file:
logger.addHandler(get_file_handler(log_file))
# with this pattern, it's rarely necessary to propagate the error up to parent
logger.propagate = False
return logger
## Example usage:
#>>> from good_logger import get_logger
#>>> logger = get_logger(__name__, 'log.json')
#>>> logger.info({"msg": "message here", "status": "pass"})
#2020-07-20 21:30:04,037 — __main__ — INFO: this is a test
python-json-logger
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment