config.py
##时间-日志级别-完整路径-文件名字-文件行-函数名字-信息
LOG_FORMAT = "%(asctime)s:%(levelname)s:%(pathname)s:%(module)s:%(lineno)d:%(funcName)s:%(message)s"
字符串详细信息
格式字符串 | 作用 |
%(name)s | 日志记录器的名称(记录通道) |
%(levelno)s |
|
%(levelname)s |
|
%(pathname)s | 日志调用的源文件的完整路径名 |
%(filename)s | 日志调用的源文件的文件名部分 |
%(module)s | 日志调用的源文件的文件名的名称部分 |
%(lineno)d | 日志调用的源行号 |
%(funcName)s | 日志调用的函数名 |
%(created)f | 打印日志的时间; time.time() 的返回值 |
%(asctime)s | 打印日志的时间; datetime.datetime.now() 的返回值 |
%(msecs)d | 打印日志的毫秒部分 |
%(relativeCreated)d |
|
%(thread)d | 线程ID |
%(threadName)s | 线程名,一般是主线程 MainThread |
%(process)d | 进程ID |
%(message)s | 日志信息 |
集成链路追踪TraceID 技术
-
log_format 集成traceID
config.py
##时间-日志级别-完整路径-文件名字-文件行-函数名字-信息
LOG_FORMAT = "%(asctime)s:%(levelname)s:%(trace_id)s:%(thread)s:%(pathname)s:%(lineno)d:%(funcName)s:%(message)s"
-
superset/utils/logging_configurator.py
def get_trace_id():
if has_request_context():
if 'trace_id' not in g:
g.trace_id = str(uuid.uuid4())
return g.trace_id
else:
# Fallback Trace ID if outside of Flask request context
return str(uuid.uuid4())
# 自定义 LogRecord,用于添加 Trace ID
class CustomLogRecord(logging.LogRecord):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.trace_id = get_trace_id() # 生成 Trace ID
# 截取 pathname,只保留最后三个部分
# path_parts = self.pathname.split(os.sep)
# if len(path_parts) > 3:
# self.pathname = os.path.join(path_parts[-3],path_parts[-2], path_parts[-1])
logging.setLogRecordFactory(CustomLogRecord)