# Version 3.2.1
import logging
import logging.handlers
def memoize(f):
cache = {}
def memf(*x):
if x not in cache:
cache[x] = f(*x)
return cache[x]
return memf
@memoize
def get_logger():
"""
HTTP logging is always verbose (DEBUG).
Console logging is INFO by default.
"""
# create logger
logger = logging.getLogger('informatica')
logger.setLevel(logging.DEBUG)
# create console handler
console_handler = logging.StreamHandler()
# create formatter
console_formatter = logging.Formatter('%(asctime)s [%(levelname)8s] %(message)s', datefmt="%Y-%m-%d %H:%M:%S")
# add formatter to console_handler
console_handler.setFormatter(console_formatter)
console_handler.setLevel(logging.INFO)
# http handler
host = "localhost:9090"
url = ""
class MyHTTPHandler(logging.handlers.HTTPHandler):
wanted = ["lineno", "module", "pathname", "funcName", "process", "levelname", "levelno", "msg"]
def mapLogRecord(self, record):
return {name: getattr(record, name, "#missing") for name in self.wanted}
http_handler = MyHTTPHandler(host, url, method='GET')
# add console_handler to logger
logger.addHandler(console_handler)
http_formatter = logging.Formatter('%(name)s - %(levelname)8s - %(message)s')
http_handler.setFormatter(http_formatter)
http_handler.setLevel(logging.DEBUG)
logger.addHandler(http_handler)
return logger
def record_usage():
get_logger().debug("used")
if __name__ == "__main__":
record_usage()