Example #1
0
def logsetup(app):

    global _setup_done
    if _setup_done:
        return
    _setup_done = True

    @app.before_request
    def log_before_request():
        g.request_start_time = time.time()
        g.request_log_level = 2

    if app.config.get("log_request", True):

        @app.after_request
        def log_after_request(response):
            log_level = getattr(g, 'request_log_level', 2)
            if log_level == 0:
                return
            resp_text = ""
            resp_len = -1
            try:
                resp_len = len(response.response[0])
                resp_text = response.response[0][:192]
            except:
                pass
            t = None
            if hasattr(g, 'request_start_time'):
                t = float("%.3f" % (time.time() - g.request_start_time))
            extra = {
                "response_code": response.status_code,
                "response_length": resp_len,
                "response_time": t,
                "log_level": log_level,
            }
            if response.status_code >= 400:
                extra["response"] = resp_text
            if hasattr(g, "database"):
                extra["database"] = g.database
            logging.getLogger("request").info("{} {} - {}".format(
                request.method, request.url, response.status_code),
                                              extra=extra)

            return response

    logging.setLoggerClass(ContextAwareLogger)

    syslog_path = '/dev/log'

    if sys.platform == 'darwin':
        syslog_path = '/var/run/syslog'
    elif sys.platform == 'win32':
        syslog_path = ('localhost', 514)

    # Install log file handler
    handler = SysLogHandler(address=syslog_path,
                            facility=SysLogHandler.LOG_USER)
    handler.name = "serverlog"
    handler.setFormatter(ServerLogFormatter())
    logging.root.addHandler(handler)

    # Install eventLog file handler
    handler = SysLogHandler(address=syslog_path,
                            facility=SysLogHandler.LOG_LOCAL0)
    handler.name = "eventlog"
    handler.setFormatter(EventLogFormatter())
    l = logging.getLogger("eventlog")
    l.propagate = False
    l.setLevel('INFO')
    l.addHandler(handler)

    # Install client file handler
    handler = SysLogHandler(address=syslog_path,
                            facility=SysLogHandler.LOG_LOCAL1)
    handler.name = "clientlog"
    handler.setFormatter(ClientLogFormatter())
    l = logging.getLogger("clientlog")
    l.propagate = False
    l.setLevel('INFO')
    l.addHandler(handler)

    # request handler
    handler = SysLogHandler(address=syslog_path,
                            facility=SysLogHandler.LOG_LOCAL2)
    handler.name = "request"
    handler.setFormatter(RequestLogFormatter())
    l = logging.getLogger("request")
    l.propagate = False
    l.addHandler(handler)

    # Quiet down copule of very chatty loggers. This can be overridden in config.json.
    for logger_name in [
            'sqlalchemy', 'werkzeug',
            'requests.packages.urllib3.connectionpool'
    ]:
        logging.getLogger(logger_name).setLevel('WARNING')

    # Apply additional 'level' and 'propagate' settings for handlers and
    # loggers. See https://docs.python.org/2.7/library/logging.config.html#
    # Example format:
    # "logging": {
    #     "version": 1,
    #     "incremental": true,
    #     "loggers": {
    #         "my_chatty_logger": {
    #             "level": "WARNING"
    #         }
    #     },
    #     "handlers": {
    #         "serverlog": {
    #             "level": "INFO",
    #         }
    #     }
    # }
    if 'logging' in app.config:
        logging.config.dictConfig(app.config['logging'])
Example #2
0
def logsetup(app):

    global _setup_done
    if _setup_done:
        return
    _setup_done = True

    logging.setLoggerClass(ContextAwareLogger)

    syslog_path = '/dev/log'
    if sys.platform == 'darwin':
        syslog_path = '/var/run/syslog'

    # Install log file handler
    handler = SysLogHandler(address=syslog_path,
                            facility=SysLogHandler.LOG_USER)
    handler.name = "serverlog"
    handler.setFormatter(ServerLogFormatter())
    logging.root.addHandler(handler)

    # Install eventLog file handler
    handler = SysLogHandler(address=syslog_path,
                            facility=SysLogHandler.LOG_LOCAL0)
    handler.name = "eventlog"
    handler.setFormatter(EventLogFormatter())
    l = logging.getLogger("eventlog")
    l.propagate = False
    l.addHandler(handler)

    # Install client file handler
    handler = SysLogHandler(address=syslog_path,
                            facility=SysLogHandler.LOG_LOCAL1)
    handler.name = "clientlog"
    handler.setFormatter(ClientLogFormatter())
    l = logging.getLogger("clientlog")
    l.propagate = False
    l.addHandler(handler)

    # Quiet down copule of very chatty loggers. This can be overridden in config.json.
    for logger_name in [
            'sqlalchemy', 'werkzeug',
            'requests.packages.urllib3.connectionpool'
    ]:
        logging.getLogger(logger_name).setLevel('WARNING')

    # Apply additional 'level' and 'propagate' settings for handlers and
    # loggers. See https://docs.python.org/2.7/library/logging.config.html#
    # Example format:
    # "logging": {
    #     "version": 1,
    #     "incremental": true,
    #     "loggers": {
    #         "my_chatty_logger": {
    #             "level": "WARNING"
    #         }
    #     },
    #     "handlers": {
    #         "serverlog": {
    #             "level": "INFO",
    #         }
    #     }
    # }
    if 'logging' in app.config:
        logging.config.dictConfig(app.config['logging'])