|
|
|
|
|
|
|
|
import logging |
|
|
import logging |
|
|
import os |
|
|
import os |
|
|
import sys |
|
|
import sys |
|
|
|
|
|
import uuid |
|
|
from logging.handlers import RotatingFileHandler |
|
|
from logging.handlers import RotatingFileHandler |
|
|
|
|
|
|
|
|
|
|
|
import flask |
|
|
|
|
|
|
|
|
from configs import dify_config |
|
|
from configs import dify_config |
|
|
from dify_app import DifyApp |
|
|
from dify_app import DifyApp |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
) |
|
|
) |
|
|
|
|
|
|
|
|
# Always add StreamHandler to log to console |
|
|
# Always add StreamHandler to log to console |
|
|
log_handlers.append(logging.StreamHandler(sys.stdout)) |
|
|
|
|
|
|
|
|
sh = logging.StreamHandler(sys.stdout) |
|
|
|
|
|
sh.addFilter(RequestIdFilter()) |
|
|
|
|
|
log_formatter = logging.Formatter(fmt=dify_config.LOG_FORMAT) |
|
|
|
|
|
sh.setFormatter(log_formatter) |
|
|
|
|
|
log_handlers.append(sh) |
|
|
|
|
|
|
|
|
logging.basicConfig( |
|
|
logging.basicConfig( |
|
|
level=dify_config.LOG_LEVEL, |
|
|
level=dify_config.LOG_LEVEL, |
|
|
format=dify_config.LOG_FORMAT, |
|
|
|
|
|
datefmt=dify_config.LOG_DATEFORMAT, |
|
|
datefmt=dify_config.LOG_DATEFORMAT, |
|
|
handlers=log_handlers, |
|
|
handlers=log_handlers, |
|
|
force=True, |
|
|
force=True, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for handler in logging.root.handlers: |
|
|
for handler in logging.root.handlers: |
|
|
handler.formatter.converter = time_converter |
|
|
handler.formatter.converter = time_converter |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_request_id(): |
|
|
|
|
|
if getattr(flask.g, "request_id", None): |
|
|
|
|
|
return flask.g.request_id |
|
|
|
|
|
|
|
|
|
|
|
new_uuid = uuid.uuid4().hex[:10] |
|
|
|
|
|
flask.g.request_id = new_uuid |
|
|
|
|
|
|
|
|
|
|
|
return new_uuid |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class RequestIdFilter(logging.Filter): |
|
|
|
|
|
# This is a logging filter that makes the request ID available for use in |
|
|
|
|
|
# the logging format. Note that we're checking if we're in a request |
|
|
|
|
|
# context, as we may want to log things before Flask is fully loaded. |
|
|
|
|
|
def filter(self, record): |
|
|
|
|
|
record.req_id = get_request_id() if flask.has_request_context() else "" |
|
|
|
|
|
return True |