You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

58 lines
1.8 KiB

import logging
import os
import json
import socket
import sys
LOG_LEVEL = os.getenv('LOG_LEVEL', 'DEBUG')
LOG_FORMAT = os.getenv('LOG_FORMAT', 'human')
LOG_PATTERN = os.getenv('LOG_PATTERN', '%(asctime)s - %(levelname)s - %(message)s')
LOG_EXTRA = os.getenv('LOG_EXTRA', '').split(',')
class JsonFormatter(logging.Formatter):
def format(self, record):
log_record = {
'name': record.name,
'msg': record.getMessage(),
'levelname': record.levelname,
'levelno': record.levelno,
'pathname': record.pathname,
'filename': record.filename,
'module': record.module,
'lineno': record.lineno,
'funcName': record.funcName,
'created': record.created,
'msecs': record.msecs,
'relativeCreated': record.relativeCreated,
'thread': record.thread,
'threadName': record.threadName,
'processName': record.processName,
'process': record.process,
'hostname': socket.gethostname(),
'pid': record.process
}
for extra in LOG_EXTRA:
log_record[extra] = getattr(record, extra, None)
return json.dumps(log_record)
# Configurazione del logger
logger = logging.getLogger('logtest')
logger.setLevel(LOG_LEVEL)
# Handler per log in formato JSON
json_handler = logging.StreamHandler(sys.stdout)
json_handler.setFormatter(JsonFormatter())
# Handler per log leggibile
human_readable_handler = logging.StreamHandler(sys.stdout)
human_formatter = logging.Formatter(
LOG_PATTERN
)
human_readable_handler.setFormatter(human_formatter)
# Aggiungere gli handler al logger
if LOG_FORMAT == 'json':
logger.addHandler(json_handler)
else:
logger.addHandler(human_readable_handler)