Skip to content

Commit 378bdfc

Browse files
authored
Refactor log utils (infiniflow#10973)
### What problem does this PR solve? As title. ### Type of change - [x] Refactoring --------- Signed-off-by: Jin Hai <haijin.chn@gmail.com>
1 parent 395ce16 commit 378bdfc

File tree

9 files changed

+88
-220
lines changed

9 files changed

+88
-220
lines changed

admin/server/admin_server.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
from werkzeug.serving import run_simple
2424
from flask import Flask
2525
from routes import admin_bp
26-
from api.utils.log_utils import init_root_logger
26+
from common.log_utils import init_root_logger
2727
from common.contants import SERVICE_CONF
2828
from common.config_utils import show_configs
2929
from api import settings

api/ragflow_server.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
# from beartype.claw import beartype_all # <-- you didn't sign up for this
1919
# beartype_all(conf=BeartypeConf(violation_type=UserWarning)) # <-- emit warnings from all code
2020

21-
from api.utils.log_utils import init_root_logger
21+
from common.log_utils import init_root_logger
2222
from plugin import GlobalPluginManager
2323
init_root_logger("ragflow_server")
2424

api/utils/api_utils.py

Lines changed: 0 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,10 @@
2222
import random
2323
import threading
2424
import time
25-
from base64 import b64encode
2625
from copy import deepcopy
2726
from functools import wraps
28-
from hmac import HMAC
2927
from io import BytesIO
3028
from typing import Any, Callable, Coroutine, Optional, Type, Union
31-
from urllib.parse import quote, urlencode
32-
from uuid import uuid1
3329

3430
import requests
3531
import trio
@@ -82,46 +78,6 @@ def serialize_for_json(obj):
8278
return str(obj)
8379

8480

85-
def request(**kwargs):
86-
sess = requests.Session()
87-
stream = kwargs.pop("stream", sess.stream)
88-
timeout = kwargs.pop("timeout", None)
89-
kwargs["headers"] = {k.replace("_", "-").upper(): v for k, v in kwargs.get("headers", {}).items()}
90-
prepped = requests.Request(**kwargs).prepare()
91-
92-
if settings.CLIENT_AUTHENTICATION and settings.HTTP_APP_KEY and settings.SECRET_KEY:
93-
timestamp = str(round(time() * 1000))
94-
nonce = str(uuid1())
95-
signature = b64encode(
96-
HMAC(
97-
settings.SECRET_KEY.encode("ascii"),
98-
b"\n".join(
99-
[
100-
timestamp.encode("ascii"),
101-
nonce.encode("ascii"),
102-
settings.HTTP_APP_KEY.encode("ascii"),
103-
prepped.path_url.encode("ascii"),
104-
prepped.body if kwargs.get("json") else b"",
105-
urlencode(sorted(kwargs["data"].items()), quote_via=quote, safe="-._~").encode(
106-
"ascii") if kwargs.get("data") and isinstance(kwargs["data"], dict) else b"",
107-
]
108-
),
109-
"sha1",
110-
).digest()
111-
).decode("ascii")
112-
113-
prepped.headers.update(
114-
{
115-
"TIMESTAMP": timestamp,
116-
"NONCE": nonce,
117-
"APP-KEY": settings.HTTP_APP_KEY,
118-
"SIGNATURE": signature,
119-
}
120-
)
121-
122-
return sess.send(prepped, stream=stream, timeout=timeout)
123-
124-
12581
def get_exponential_backoff_interval(retries, full_jitter=False):
12682
"""Calculate the exponential backoff wait time."""
12783
# Will be zero if factor equals 0

api/utils/health.py

Lines changed: 0 additions & 104 deletions
This file was deleted.

api/utils/log_utils.py

Lines changed: 0 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -13,70 +13,3 @@
1313
# See the License for the specific language governing permissions and
1414
# limitations under the License.
1515
#
16-
import os
17-
import os.path
18-
import logging
19-
from logging.handlers import RotatingFileHandler
20-
from common.file_utils import get_project_base_directory
21-
22-
initialized_root_logger = False
23-
24-
def init_root_logger(logfile_basename: str, log_format: str = "%(asctime)-15s %(levelname)-8s %(process)d %(message)s"):
25-
global initialized_root_logger
26-
if initialized_root_logger:
27-
return
28-
initialized_root_logger = True
29-
30-
logger = logging.getLogger()
31-
logger.handlers.clear()
32-
log_path = os.path.abspath(os.path.join(get_project_base_directory(), "logs", f"{logfile_basename}.log"))
33-
34-
os.makedirs(os.path.dirname(log_path), exist_ok=True)
35-
formatter = logging.Formatter(log_format)
36-
37-
handler1 = RotatingFileHandler(log_path, maxBytes=10*1024*1024, backupCount=5)
38-
handler1.setFormatter(formatter)
39-
logger.addHandler(handler1)
40-
41-
handler2 = logging.StreamHandler()
42-
handler2.setFormatter(formatter)
43-
logger.addHandler(handler2)
44-
45-
logging.captureWarnings(True)
46-
47-
LOG_LEVELS = os.environ.get("LOG_LEVELS", "")
48-
pkg_levels = {}
49-
for pkg_name_level in LOG_LEVELS.split(","):
50-
terms = pkg_name_level.split("=")
51-
if len(terms)!= 2:
52-
continue
53-
pkg_name, pkg_level = terms[0], terms[1]
54-
pkg_name = pkg_name.strip()
55-
pkg_level = logging.getLevelName(pkg_level.strip().upper())
56-
if not isinstance(pkg_level, int):
57-
pkg_level = logging.INFO
58-
pkg_levels[pkg_name] = logging.getLevelName(pkg_level)
59-
60-
for pkg_name in ['peewee', 'pdfminer']:
61-
if pkg_name not in pkg_levels:
62-
pkg_levels[pkg_name] = logging.getLevelName(logging.WARNING)
63-
if 'root' not in pkg_levels:
64-
pkg_levels['root'] = logging.getLevelName(logging.INFO)
65-
66-
for pkg_name, pkg_level in pkg_levels.items():
67-
pkg_logger = logging.getLogger(pkg_name)
68-
pkg_logger.setLevel(pkg_level)
69-
70-
msg = f"{logfile_basename} log path: {log_path}, log levels: {pkg_levels}"
71-
logger.info(msg)
72-
73-
74-
def log_exception(e, *args):
75-
logging.exception(e)
76-
for a in args:
77-
if hasattr(a, "text"):
78-
logging.error(a.text)
79-
raise Exception(a.text)
80-
else:
81-
logging.error(str(a))
82-
raise e

common/log_utils.py

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
#
2+
# Copyright 2025 The InfiniFlow Authors. All Rights Reserved.
3+
#
4+
# Licensed under the Apache License, Version 2.0 (the "License");
5+
# you may not use this file except in compliance with the License.
6+
# You may obtain a copy of the License at
7+
#
8+
# http://www.apache.org/licenses/LICENSE-2.0
9+
#
10+
# Unless required by applicable law or agreed to in writing, software
11+
# distributed under the License is distributed on an "AS IS" BASIS,
12+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
# See the License for the specific language governing permissions and
14+
# limitations under the License.
15+
#
16+
17+
import os
18+
import os.path
19+
import logging
20+
from logging.handlers import RotatingFileHandler
21+
from common.file_utils import get_project_base_directory
22+
23+
initialized_root_logger = False
24+
25+
def init_root_logger(logfile_basename: str, log_format: str = "%(asctime)-15s %(levelname)-8s %(process)d %(message)s"):
26+
global initialized_root_logger
27+
if initialized_root_logger:
28+
return
29+
initialized_root_logger = True
30+
31+
logger = logging.getLogger()
32+
logger.handlers.clear()
33+
log_path = os.path.abspath(os.path.join(get_project_base_directory(), "logs", f"{logfile_basename}.log"))
34+
35+
os.makedirs(os.path.dirname(log_path), exist_ok=True)
36+
formatter = logging.Formatter(log_format)
37+
38+
handler1 = RotatingFileHandler(log_path, maxBytes=10*1024*1024, backupCount=5)
39+
handler1.setFormatter(formatter)
40+
logger.addHandler(handler1)
41+
42+
handler2 = logging.StreamHandler()
43+
handler2.setFormatter(formatter)
44+
logger.addHandler(handler2)
45+
46+
logging.captureWarnings(True)
47+
48+
LOG_LEVELS = os.environ.get("LOG_LEVELS", "")
49+
pkg_levels = {}
50+
for pkg_name_level in LOG_LEVELS.split(","):
51+
terms = pkg_name_level.split("=")
52+
if len(terms)!= 2:
53+
continue
54+
pkg_name, pkg_level = terms[0], terms[1]
55+
pkg_name = pkg_name.strip()
56+
pkg_level = logging.getLevelName(pkg_level.strip().upper())
57+
if not isinstance(pkg_level, int):
58+
pkg_level = logging.INFO
59+
pkg_levels[pkg_name] = logging.getLevelName(pkg_level)
60+
61+
for pkg_name in ['peewee', 'pdfminer']:
62+
if pkg_name not in pkg_levels:
63+
pkg_levels[pkg_name] = logging.getLevelName(logging.WARNING)
64+
if 'root' not in pkg_levels:
65+
pkg_levels['root'] = logging.getLevelName(logging.INFO)
66+
67+
for pkg_name, pkg_level in pkg_levels.items():
68+
pkg_logger = logging.getLogger(pkg_name)
69+
pkg_logger.setLevel(pkg_level)
70+
71+
msg = f"{logfile_basename} log path: {log_path}, log levels: {pkg_levels}"
72+
logger.info(msg)
73+
74+
75+
def log_exception(e, *args):
76+
logging.exception(e)
77+
for a in args:
78+
if hasattr(a, "text"):
79+
logging.error(a.text)
80+
raise Exception(a.text)
81+
else:
82+
logging.error(str(a))
83+
raise e

rag/llm/embedding_model.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
from openai import OpenAI
2828
from zhipuai import ZhipuAI
2929

30-
from api.utils.log_utils import log_exception
30+
from common.log_utils import log_exception
3131
from common.token_utils import num_tokens_from_string, truncate
3232
from api import settings
3333
import logging

rag/llm/rerank_model.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
import requests
2323
from yarl import URL
2424

25-
from api.utils.log_utils import log_exception
25+
from common.log_utils import log_exception
2626
from common.token_utils import num_tokens_from_string, truncate, total_token_count_from_response
2727

2828
class Base(ABC):

rag/svr/task_executor.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
from api.db.services.pipeline_operation_log_service import PipelineOperationLogService
2929
from api.utils.api_utils import timeout
3030
from common.base64_image import image2id
31-
from api.utils.log_utils import init_root_logger
31+
from common.log_utils import init_root_logger
3232
from common.file_utils import get_project_base_directory
3333
from common.config_utils import show_configs
3434
from graphrag.general.index import run_graphrag_for_kb

0 commit comments

Comments
 (0)