Compare commits

..

10 Commits

Author SHA1 Message Date
132fbb13b7 feat:增加查询博客相邻记录功能 2025-10-12 22:56:31 +08:00
38610aef67 fix:修复fluentbit端口错误的问题 2025-10-09 23:48:12 +08:00
8fc915a6e3 feat:更新host地址 2025-10-09 22:58:49 +08:00
0d32c9b629 fix:解决数据库断线的问题 2025-10-09 09:33:51 +08:00
37b16dc5e5 feat:增加fluentbit日志输出 2025-09-29 14:20:04 +08:00
46ea187d55 fix:修复日志不显示问题 2025-09-29 10:44:56 +08:00
b6617d3db2 feat:更新博客访客记录 2025-09-28 18:42:08 +08:00
bd1d10e0f7 fix:修复博客评论接口 2025-09-26 17:13:01 +08:00
a8fdd04c41 feat:增加fluent日志 2025-09-25 23:33:50 +08:00
5e3dc21ed1 feat:增加博客搜索功能 2025-09-25 17:31:25 +08:00
15 changed files with 1029 additions and 90 deletions

View File

@@ -1,5 +1,7 @@
FROM python:3.12-slim FROM python:3.12-slim
WORKDIR /app WORKDIR /app
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' > /etc/timezone
COPY ./packages /app/packages COPY ./packages /app/packages
COPY requirements.txt /app/ COPY requirements.txt /app/
RUN pip install --no-cache-dir --no-index --find-links=/app/packages -r requirements.txt RUN pip install --no-cache-dir --no-index --find-links=/app/packages -r requirements.txt

View File

@@ -5,10 +5,12 @@ from sqlalchemy.orm import Session
from config.auth import verify_token from config.auth import verify_token
from schemas.blog import BlogResponse, BlogQuery, BlogCategoryResponse, BlogStatsResponse, \ from schemas.blog import BlogResponse, BlogQuery, BlogCategoryResponse, BlogStatsResponse, \
BlogLatestResponse, BlogCommentCreate, BlogCommentResponse, BlogVisitResponse, BlogCreate, BlogUpdate BlogLatestResponse, BlogCommentCreate, BlogCommentResponse, BlogVisitResponse, BlogCreate, BlogUpdate, \
BlogAdjacentResponse
from schemas.blog_elastic import BlogSearch
from schemas.pagination import PageResult from schemas.pagination import PageResult
from config.database import get_db from config.database import get_db
from service import blog_service from service import blog_service, blog_elastic_service
router = APIRouter( router = APIRouter(
prefix="/blog", prefix="/blog",
@@ -17,6 +19,16 @@ router = APIRouter(
) )
@router.get("/sync", summary="同步博客到elastic", response_model=bool)
def sync_all_blog(db: Session = Depends(get_db)):
return blog_elastic_service.sync_all_blog(db)
@router.get("/search", summary="搜索elastic", response_model=List[BlogSearch])
def search_blog(keyword: str):
return blog_elastic_service.search_blog(keyword)
@router.get("/page", summary="分页查询博客", response_model=PageResult[BlogResponse]) @router.get("/page", summary="分页查询博客", response_model=PageResult[BlogResponse])
def query_blog_by_page(current_page: int = Query(1, ge=1, alias="currentPage", description="当前页码"), def query_blog_by_page(current_page: int = Query(1, ge=1, alias="currentPage", description="当前页码"),
page_size: int = Query(10, ge=1, le=100, alias="pageSize", description="每页数量"), page_size: int = Query(10, ge=1, le=100, alias="pageSize", description="每页数量"),
@@ -30,26 +42,41 @@ def query_blog_by_condition(query: BlogQuery = Depends(),
return blog_service.query_blog_by_condition(db, query) return blog_service.query_blog_by_condition(db, query)
@router.get("/content/{blog_id}", summary="查询博客内容", response_model=BlogResponse) @router.get("/{blog_id}/content", summary="查询博客内容", response_model=BlogResponse)
def query_blog_by_id(blog_id: int, db: Session = Depends(get_db)): def query_blog_by_id(blog_id: int, db: Session = Depends(get_db)):
return blog_service.query_blog_by_id(db, blog_id) return blog_service.query_blog_by_id(db, blog_id)
@router.post("", summary="新增博客内容", response_model=bool) @router.post("", summary="新增博客内容", response_model=bool)
def add_blog(blog: BlogCreate, db: Session = Depends(get_db), _ = Depends(verify_token)): def add_blog(blog: BlogCreate, db: Session = Depends(get_db), _=Depends(verify_token)):
return blog_service.add_blog(db, blog) return blog_service.add_blog(db, blog)
@router.put("/{blog_id}", summary="更新博客内容", response_model=bool) @router.put("/{blog_id}", summary="更新博客内容", response_model=bool)
def update_blog(blog_id: int, blog: BlogUpdate, db: Session = Depends(get_db), _ = Depends(verify_token)): def update_blog(blog_id: int, blog: BlogUpdate, db: Session = Depends(get_db), _=Depends(verify_token)):
return blog_service.update_blog(db, blog_id, blog) return blog_service.update_blog(db, blog_id, blog)
@router.delete("/{blog_id}", summary="删除博客内容", response_model=bool) @router.delete("/{blog_id}", summary="删除博客内容", response_model=bool)
def delete_blog(blog_id: int, db: Session = Depends(get_db), _ = Depends(verify_token)): def delete_blog(blog_id: int, db: Session = Depends(get_db), _=Depends(verify_token)):
return blog_service.delete_blog(db, blog_id) return blog_service.delete_blog(db, blog_id)
@router.get("/{blog_id}/adjacent", summary="查询相邻博客", response_model=List[BlogAdjacentResponse])
def query_blog_latest(blog_id: int, db: Session = Depends(get_db)):
return blog_service.query_blog_adjacent(db, blog_id)
@router.put("/{blog_id}/comment", summary="新增博客评论", response_model=bool)
def add_blog_comment(blog_id: int, blog_comment: BlogCommentCreate, request: Request, db: Session = Depends(get_db)):
return blog_service.add_blog_comment(db, request, blog_id, blog_comment)
@router.get("/{blog_id}/comment", summary="查询博客评论", response_model=list[BlogCommentResponse])
def query_blog_comment(blog_id: int, db: Session = Depends(get_db)):
return blog_service.query_blog_comment(db, blog_id)
@router.get("/category", summary="查询博客分类", response_model=List[BlogCategoryResponse]) @router.get("/category", summary="查询博客分类", response_model=List[BlogCategoryResponse])
def query_blog_category(db: Session = Depends(get_db)): def query_blog_category(db: Session = Depends(get_db)):
return blog_service.query_blog_category(db) return blog_service.query_blog_category(db)
@@ -70,13 +97,3 @@ def query_blog_visit(current_page: int = Query(1, ge=1, alias="currentPage", des
@router.get("/latest", summary="查询近期博客", response_model=list[BlogLatestResponse]) @router.get("/latest", summary="查询近期博客", response_model=list[BlogLatestResponse])
def query_blog_latest(db: Session = Depends(get_db)): def query_blog_latest(db: Session = Depends(get_db)):
return blog_service.query_blog_latest(db) return blog_service.query_blog_latest(db)
@router.put("/comment", summary="新增博客评论", response_model=bool)
def add_blog_comment(blog_comment: BlogCommentCreate, request: Request, db: Session = Depends(get_db)):
return blog_service.add_blog_comment(db, request, blog_comment)
@router.get("/comment/{blog_id}", summary="查询博客评论", response_model=list[BlogCommentResponse])
def query_blog_comment(blog_id: int, db: Session = Depends(get_db)):
return blog_service.query_blog_comment(db, blog_id)

View File

@@ -22,7 +22,7 @@ pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="session") oauth2_scheme = OAuth2PasswordBearer(tokenUrl="session")
# 请求上下文 # 请求上下文
context_sub: ContextVar[str] = ContextVar('sub') context_sub: ContextVar[str] = ContextVar('sub', default='')
# 获取数据库 加密密码 # 获取数据库 加密密码

View File

@@ -4,9 +4,9 @@ from sqlalchemy.orm import sessionmaker
from config.setting import settings from config.setting import settings
DATABASE_URL = f"mysql+pymysql://{settings.DB_USER}:{settings.DB_PASSWORD}@{settings.DB_HOST}:{settings.DB_PORT}/{settings.DB_NAME}" DATABASE_URL = f"mysql+pymysql://root:{settings.DB_PASSWORD}@{settings.DB_HOST}:3306/blog"
engine = create_engine(url=DATABASE_URL) engine = create_engine(url=DATABASE_URL, pool_pre_ping=True, pool_recycle=3600)
# 会话工厂 # 会话工厂
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

View File

@@ -1,15 +1,16 @@
from elasticsearch import Elasticsearch from elasticsearch import Elasticsearch
from config.setting import settings
from schemas.blog_elastic import BLOG_MAPPING from schemas.blog_elastic import BLOG_MAPPING
from config.logging import logger from config.logging import logger
ES_HOSTS = "http://14.103.235.151:9200" ES_HOST = f"http://{settings.ES_HOST}:9200"
ES_USER = "elastic" ES_USER = "elastic"
ES_PASSWORD = "19940822Cxx" ES_PASSWORD = "19940822Cxx"
BLOG_INDEX = "blog" BLOG_INDEX = "blog"
# 注意Python的elasticsearch的版本要和服务器的一致 # 注意Python的elasticsearch的版本要和服务器的一致
es = Elasticsearch(ES_HOSTS, http_auth=(ES_USER, ES_PASSWORD)) es = Elasticsearch(ES_HOST, http_auth=(ES_USER, ES_PASSWORD))
if not es.indices.exists(index=BLOG_INDEX): if not es.indices.exists(index=BLOG_INDEX):
es.indices.create(index=BLOG_INDEX, body=BLOG_MAPPING) es.indices.create(index=BLOG_INDEX, body=BLOG_MAPPING)

View File

@@ -1,10 +1,18 @@
import atexit
import sys
from fluent import sender
from loguru import logger from loguru import logger
from pathlib import Path from pathlib import Path
from config.setting import settings from config.setting import settings
FLUENTD_HOST = 'host.docker.internal'
FLUENTD_PORT = 24224
TOPIC_TAG = 'blog-service'
# 日志目录 # 日志目录
LOG_DIR = Path(__file__).parent.parent.parent / "logs" LOG_DIR = Path(__file__).parent.parent / "logs"
LOG_DIR.mkdir(exist_ok=True) LOG_DIR.mkdir(exist_ok=True)
# 日志级别 # 日志级别
@@ -24,12 +32,47 @@ FILE_FORMAT = (
"{name}:{function}:{line} - {message}" "{name}:{function}:{line} - {message}"
) )
fluent_sender = sender.FluentSender(
tag=TOPIC_TAG,
host=FLUENTD_HOST,
port=FLUENTD_PORT,
buffer_max_size=8 * 1024 * 1024,
timeout=3.0,
retry_timeout=60
)
def log_to_fluent(message):
try:
record = message.record
# 构建结构化日志数据
log_data = {
'topic': TOPIC_TAG,
'timestamp': record['time'].timestamp(),
'level': record['level'].name.lower(),
'message': record['message'],
'source': f"{record['file'].path}:{record['line']}",
'module': record['module'],
'function': record['function'],
'process_id': record['process'].id,
'thread_id': record['thread'].id,
**record['extra']
}
if not fluent_sender.emit(TOPIC_TAG, log_data):
print(f"Fluentd 发送失败: {fluent_sender.last_error}")
except Exception as e:
print(f"日志处理异常: {str(e)}")
# 移除默认处理器 # 移除默认处理器
logger.remove() logger.remove()
# 添加控制台处理器 # 添加控制台处理器
logger.add( logger.add(
sink="sys.stdout", sink=sys.stdout,
level=LOG_LEVEL, level=LOG_LEVEL,
format=STDOUT_FORMAT, format=STDOUT_FORMAT,
colorize=True, colorize=True,
@@ -37,29 +80,39 @@ logger.add(
diagnose=True, # 显示详细异常信息 diagnose=True, # 显示详细异常信息
) )
# 添加文件处理器 - 常规日志
logger.add( logger.add(
sink=LOG_DIR / "app.log", log_to_fluent,
level="INFO", level=LOG_LEVEL, # 处理 INFO 及以上级别
format=FILE_FORMAT, format="{message}", # 原始消息(实际使用结构化数据)
rotation="10 MB", # 日志文件大小达到10MB时自动分割 backtrace=True, # 启用堆栈回溯
retention="7 days", # 保留7天的日志 diagnose=True # 显示诊断信息
compression="zip", # 归档时压缩为zip
enqueue=True, # 异步写入
serialize=False, # 不使用JSON格式
) )
# 添加文件处理器 - 错误日志 # # 添加文件处理器 - 常规日志
logger.add( # logger.add(
sink=LOG_DIR / "error.log", # sink=LOG_DIR / "app.log",
level="ERROR", # level="INFO",
format=FILE_FORMAT, # format=FILE_FORMAT,
rotation="10 MB", # rotation="10 MB", # 日志文件大小达到10MB时自动分割
retention="30 days", # retention="7 days", # 保留7天的日志
compression="zip", # compression="zip", # 归档时压缩为zip
enqueue=True, # enqueue=True, # 异步写入
serialize=False, # serialize=False, # 不使用JSON格式
) # )
#
# # 添加文件处理器 - 错误日志
# logger.add(
# sink=LOG_DIR / "error.log",
# level="ERROR",
# format=FILE_FORMAT,
# rotation="10 MB",
# retention="30 days",
# compression="zip",
# enqueue=True,
# serialize=False,
# )
atexit.register(fluent_sender.close)
# 导出配置好的logger # 导出配置好的logger
__all__ = ["logger"] __all__ = ["logger"]

View File

@@ -2,13 +2,11 @@ from pydantic_settings import BaseSettings
class Settings(BaseSettings): class Settings(BaseSettings):
DB_HOST: str ENVIRONMENT: str
DB_PORT: int
DB_USER: str
DB_PASSWORD: str
DB_NAME: str
LOG_LEVEL: str LOG_LEVEL: str
DB_HOST: str
DB_PASSWORD: str
ES_HOST: str
class Config: class Config:
env_file = ".env" # 指定.env文件路径 env_file = ".env" # 指定.env文件路径

View File

@@ -9,8 +9,9 @@ from middleware.exceptions import AppException
async def blog_visit_middleware(request: Request, call_next): async def blog_visit_middleware(request: Request, call_next):
# 检查路径是否匹配 /blog/content/{blog_id} # 检查路径是否匹配
if match := re.match(r"^/blog/content/(\d+)$", request.url.path): if match := re.match(r"^/blog/(\d+)/content$", request.url.path):
# 获取客户端信息 # 获取客户端信息
ip = get_client_ip(request) ip = get_client_ip(request)
user_agent = request.headers.get("User-Agent", "") user_agent = request.headers.get("User-Agent", "")

View File

@@ -1 +1 @@
fastapi~=0.115.12 fastapi~=0.115.12

View File

@@ -83,8 +83,15 @@ class BlogLatestResponse(BaseModel):
from_attributes = True from_attributes = True
class BlogAdjacentResponse(BaseModel):
id: int
title: str
class Config:
from_attributes = True
class BlogCommentCreate(BaseModel): class BlogCommentCreate(BaseModel):
blogId: int
parentId: int parentId: int
name: str name: str
website: Optional[str] = None website: Optional[str] = None

View File

@@ -12,6 +12,19 @@ class BlogElastic(BaseModel):
createTime: Optional[Union[datetime, str]] = None createTime: Optional[Union[datetime, str]] = None
updateTime: Optional[Union[datetime, str]] = None updateTime: Optional[Union[datetime, str]] = None
class Config:
from_attributes = True
class BlogSearch(BaseModel):
id: int
title: str
content: str
highlight: str
class Config:
from_attributes = True
BLOG_MAPPING = { BLOG_MAPPING = {
"mappings": { "mappings": {

View File

@@ -1,10 +1,66 @@
from datetime import datetime from datetime import datetime
from typing import List
from config.logging import logger
from elasticsearch.helpers import bulk
from sqlalchemy import select
from sqlalchemy.orm import Session
from config.elastic import es, BLOG_INDEX from config.elastic import es, BLOG_INDEX
from schemas.blog_elastic import BlogElastic from config.setting import settings
from models.blog import Blog, BlogCategory, BlogContent
from schemas.blog_elastic import BlogElastic, BlogSearch
def sync_all_blog(db: Session) -> bool:
if settings.ENVIRONMENT == 'dev':
return True
query = select(
Blog.id,
Blog.title,
BlogCategory.name.label("category"),
BlogContent.content.label("content"),
Blog.create_time.label("createTime"),
Blog.update_time.label("updateTime"),
).select_from(Blog).outerjoin(
BlogCategory, Blog.category_id == BlogCategory.id
).outerjoin(
BlogContent, Blog.content_id == BlogContent.id
)
results = db.execute(query).fetchall()
actions = [
{
"_op_type": "index", # 如果存在则更新,不存在则创建
"_index": BLOG_INDEX,
"_id": blog.id,
"_source": {
"title": blog.title,
"category": blog.category,
"content": blog.content.decode("utf-8"),
"createTime": blog.createTime.strftime("%Y-%m-%d %H:%M:%S"),
"updateTime": blog.updateTime.strftime("%Y-%m-%d %H:%M:%S")
}
}
for blog in results
]
success_count, errors = bulk(es, actions=actions)
if errors:
logger.error(f"部分文档同步失败,成功同步 {success_count}")
return False
logger.info(f"成功同步 {success_count} 条博客到 Elasticsearch")
return True
def add_blog_elastic(blog: BlogElastic) -> bool: def add_blog_elastic(blog: BlogElastic) -> bool:
if settings.ENVIRONMENT == 'dev':
return True
now = datetime.now() now = datetime.now()
blog.createTime = now.strftime("%Y-%m-%d %H:%M:%S") blog.createTime = now.strftime("%Y-%m-%d %H:%M:%S")
blog.updateTime = now.strftime("%Y-%m-%d %H:%M:%S") blog.updateTime = now.strftime("%Y-%m-%d %H:%M:%S")
@@ -15,10 +71,14 @@ def add_blog_elastic(blog: BlogElastic) -> bool:
body=blog.model_dump() body=blog.model_dump()
) )
logger.info(f"成功新增博客 {blog.id} 到 Elasticsearch")
return True return True
def update_blog_elastic(blog: BlogElastic) -> bool: def update_blog_elastic(blog: BlogElastic) -> bool:
if settings.ENVIRONMENT == 'dev':
return True
now = datetime.now() now = datetime.now()
blog.updateTime = now.strftime("%Y-%m-%d %H:%M:%S") blog.updateTime = now.strftime("%Y-%m-%d %H:%M:%S")
@@ -28,10 +88,67 @@ def update_blog_elastic(blog: BlogElastic) -> bool:
body=blog.model_dump() body=blog.model_dump()
) )
logger.info(f"成功修改博客 {blog.id} 到 Elasticsearch")
return True return True
def delete_blog(blog_id: int) -> bool: def delete_blog(blog_id: int) -> bool:
if settings.ENVIRONMENT == 'dev':
return True
es.delete(index=BLOG_INDEX, id=blog_id) es.delete(index=BLOG_INDEX, id=blog_id)
logger.info(f"成功删除博客 {blog_id} 到 Elasticsearch")
return True return True
def search_blog(keyword: str) -> List[BlogSearch]:
# 构造查询请求
body = {
"query": {
"multi_match": {
"query": keyword,
"fields": ["title^3", "content"],
"type": "phrase"
}
},
"highlight": {
"pre_tags": ["<mark>"],
"post_tags": ["</mark>"],
"fields": {
"title": {},
"content": {
"fragment_size": 150,
"number_of_fragments": 2,
"no_match_size": 100
}
}
},
"_source": ["title", "content"]
}
response = es.search(index=BLOG_INDEX, body=body)
results = []
for hit in response["hits"]["hits"]:
highlight = hit.get("highlight", {})
# 合并所有高亮片段(标题+内容)
all_highlights = []
if "title" in highlight:
all_highlights.extend(highlight["title"])
if "content" in highlight:
all_highlights.extend(highlight["content"])
# 优先使用高亮内容,否则截取内容开头
displayed_content = " ".join(all_highlights) if all_highlights \
else hit["_source"].get("content", "")[:200] + "..."
results.append(BlogSearch(
id=hit["_id"],
title=hit["_source"]["title"],
content=displayed_content,
highlight=" | ".join(all_highlights) # 合并所有高亮片段
))
return results

View File

@@ -1,12 +1,13 @@
from typing import List from typing import List
from fastapi import Request from fastapi import Request
from sqlalchemy import select, func, desc, and_ from sqlalchemy import select, func, desc, and_, asc, delete
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
from models.blog import Blog, BlogCategory, BlogVisit, BlogContent, BlogComment from models.blog import Blog, BlogCategory, BlogVisit, BlogContent, BlogComment
from schemas.blog import BlogResponse, BlogQuery, BlogCategoryResponse, BlogStatsResponse, \ from schemas.blog import BlogResponse, BlogQuery, BlogCategoryResponse, BlogStatsResponse, \
BlogLatestResponse, BlogCommentCreate, BlogCommentResponse, BlogVisitResponse, BlogCreate, BlogUpdate BlogLatestResponse, BlogCommentCreate, BlogCommentResponse, BlogVisitResponse, BlogCreate, BlogUpdate, \
BlogAdjacentResponse
from schemas.blog_elastic import BlogElastic from schemas.blog_elastic import BlogElastic
from schemas.pagination import PageResult from schemas.pagination import PageResult
from schemas.paginate_query import paginate_query from schemas.paginate_query import paginate_query
@@ -82,6 +83,8 @@ def query_blog_by_condition(db: Session, blog_query: BlogQuery) -> List[BlogResp
def query_blog_by_id(db: Session, blog_id: int) -> BlogResponse: def query_blog_by_id(db: Session, blog_id: int) -> BlogResponse:
check_blog_exist(db, blog_id)
query = db.query( query = db.query(
Blog.id.label("id"), Blog.id.label("id"),
Blog.title.label("title"), Blog.title.label("title"),
@@ -104,8 +107,6 @@ def query_blog_by_id(db: Session, blog_id: int) -> BlogResponse:
).filter(Blog.id == blog_id) ).filter(Blog.id == blog_id)
blog = query.first() blog = query.first()
if blog[0] is None:
raise AppException("博客不存在")
return BlogResponse.from_orm(blog) return BlogResponse.from_orm(blog)
@@ -140,7 +141,8 @@ def add_blog(db: Session, blog: BlogCreate) -> bool:
def add_blog_category(db: Session, category: str) -> int: def add_blog_category(db: Session, category: str) -> int:
db_blog_category = db.query(BlogCategory).filter(BlogCategory.name == category).first() db_blog_category = db.execute(select(BlogCategory).where(BlogCategory.name == category)).scalar_one_or_none()
if db_blog_category is None: if db_blog_category is None:
db_new_blog_category = BlogCategory(name=category) db_new_blog_category = BlogCategory(name=category)
db.add(db_new_blog_category) db.add(db_new_blog_category)
@@ -161,9 +163,7 @@ def add_blog_content(db: Session, content: str) -> int:
def update_blog(db: Session, blog_id: int, blog: BlogUpdate) -> bool: def update_blog(db: Session, blog_id: int, blog: BlogUpdate) -> bool:
db_blog = db.query(Blog).filter(Blog.id == blog_id).first() db_blog = check_blog_exist(db, blog_id)
if not db_blog:
raise AppException("博客不存在")
update_data = blog.model_dump(exclude_unset=True) update_data = blog.model_dump(exclude_unset=True)
@@ -186,7 +186,7 @@ def update_blog(db: Session, blog_id: int, blog: BlogUpdate) -> bool:
def update_blog_category(db: Session, category: str) -> int: def update_blog_category(db: Session, category: str) -> int:
db_blog_category = db.query(BlogCategory).filter(BlogCategory.name == category).first() db_blog_category = db.execute(select(BlogCategory).where(BlogCategory.name == category)).scalar_one_or_none()
if db_blog_category is None: if db_blog_category is None:
return add_blog_category(db, category) return add_blog_category(db, category)
@@ -195,12 +195,9 @@ def update_blog_category(db: Session, category: str) -> int:
def update_blog_content(db: Session, blog_content_id: int, blog_content: str) -> bool: def update_blog_content(db: Session, blog_content_id: int, blog_content: str) -> bool:
db_blog_content = db.query(BlogContent).filter(BlogContent.id == blog_content_id).first() db_blog_content = check_blog_content_exist(db, blog_content_id)
if not db_blog_content:
raise AppException("博客内容不存在")
db_blog_content.content = blog_content.encode('utf-8') db_blog_content.content = blog_content.encode('utf-8')
db.commit() db.commit()
db.refresh(db_blog_content) db.refresh(db_blog_content)
@@ -208,24 +205,19 @@ def update_blog_content(db: Session, blog_content_id: int, blog_content: str) ->
def delete_blog(db: Session, blog_id: int) -> bool: def delete_blog(db: Session, blog_id: int) -> bool:
db_blog = db.query(Blog).filter(Blog.id == blog_id).first() db_blog = check_blog_exist(db, blog_id)
if not db_blog:
raise AppException("博客不存在")
delete_blog_content(db, db_blog.content_id) delete_blog_content(db, db_blog.content_id)
db.execute(delete(Blog).where(Blog.id == blog_id))
db.delete(db_blog)
db.commit() db.commit()
return True return True
def delete_blog_content(db: Session, blog_content_id: int) -> bool: def delete_blog_content(db: Session, blog_content_id: int) -> bool:
db_blog_content = db.query(BlogContent).filter(BlogContent.id == blog_content_id).first() check_blog_content_exist(db, blog_content_id)
if not db_blog_content:
raise AppException("博客内容不存在")
db.delete(db_blog_content) db.execute(delete(BlogContent).where(BlogContent.id == blog_content_id))
db.commit() db.commit()
return True return True
@@ -265,6 +257,35 @@ def query_blog_latest(db: Session) -> List[BlogLatestResponse]:
return [BlogLatestResponse.from_orm(result) for result in results] return [BlogLatestResponse.from_orm(result) for result in results]
def query_blog_adjacent(db: Session, blog_id: int) -> List[BlogAdjacentResponse]:
check_blog_exist(db, blog_id)
prev_result = db.execute(
select(Blog.id, Blog.title)
.where(Blog.id < blog_id)
.order_by(desc(Blog.id))
.limit(1)
).first()
next_result = db.execute(
select(Blog.id, Blog.title)
.where(Blog.id > blog_id)
.order_by(asc(Blog.id))
.limit(1)
).first()
return [
BlogAdjacentResponse(
id=prev_result[0] if prev_result else 0,
title=prev_result[1] if prev_result else ""
),
BlogAdjacentResponse(
id=next_result[0] if next_result else 0,
title=next_result[1] if next_result else ""
)
]
def add_blog_visit(db: Session, blog_visit: BlogVisit): def add_blog_visit(db: Session, blog_visit: BlogVisit):
db.add(blog_visit) db.add(blog_visit)
db.commit() db.commit()
@@ -304,22 +325,21 @@ def query_blog_comment(db: Session, blog_id: int) -> List[BlogCommentResponse]:
return [BlogCommentResponse.from_orm(result) for result in results] return [BlogCommentResponse.from_orm(result) for result in results]
def add_blog_comment(db: Session, request: Request, blog_comment: BlogCommentCreate) -> bool: def add_blog_comment(db: Session, request: Request, blog_id: int, blog_comment: BlogCommentCreate) -> bool:
blog = db.query(Blog).filter(Blog.id == blog_comment.blogId).first() check_blog_exist(db, blog_id)
if not blog:
raise AppException("博客不存在")
if blog_comment.parentId != 0: if blog_comment.parentId != 0:
parent_comment = db.query(BlogComment).filter( parent_comment = db.execute(
BlogComment.id == blog_comment.parentId, select(BlogComment)
BlogComment.blog_id == blog_comment.blogId .where(BlogComment.id == blog_comment.parentId)
).first() .where(BlogComment.blog_id == blog_id)
).scalar_one_or_none()
if not parent_comment: if not parent_comment:
raise AppException("父评论不存在") raise AppException("父评论不存在")
db_comment = BlogComment( db_comment = BlogComment(
blog_id=blog_comment.blogId, blog_id=blog_id,
parent_id=blog_comment.parentId, parent_id=blog_comment.parentId,
name=blog_comment.name, name=blog_comment.name,
website=blog_comment.website, website=blog_comment.website,
@@ -334,3 +354,20 @@ def add_blog_comment(db: Session, request: Request, blog_comment: BlogCommentCre
db.refresh(db_comment) db.refresh(db_comment)
return True return True
def check_blog_exist(db: Session, blog_id: int) -> Blog:
result = db.execute(select(Blog).where(Blog.id == blog_id)).scalar_one_or_none()
if not result:
raise AppException("博客不存在")
return result
def check_blog_content_exist(db: Session, blog_content_id: int) -> BlogContent:
result = db.execute(select(BlogContent).where(BlogContent.id == blog_content_id)).scalar_one_or_none()
if not result:
raise AppException("博客内容不存在")
return result

View File

@@ -18,6 +18,3 @@ def create(db: Session, username: str, password: str) -> SessionResponse:
access_token=create_token(create_payload(username)), access_token=create_token(create_payload(username)),
token_type="Bearer" token_type="Bearer"
) )

View File

@@ -858,3 +858,699 @@ category
2025-09-25 00:06:40.224 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: POST http://127.0.0.1:8082/blog 2025-09-25 00:06:40.224 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: POST http://127.0.0.1:8082/blog
2025-09-25 00:07:13.887 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: POST http://127.0.0.1:8082/blog 2025-09-25 00:07:13.887 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: POST http://127.0.0.1:8082/blog
2025-09-25 00:07:15.655 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: POST http://127.0.0.1:8082/blog 2025-09-25 00:07:15.655 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: POST http://127.0.0.1:8082/blog
2025-09-25 11:44:15.070 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/
2025-09-25 11:44:15.071 | WARNING  | middleware.exceptions:global_exception_handler:26 - 响应: 404
2025-09-25 11:44:15.173 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/favicon.ico
2025-09-25 11:44:15.174 | WARNING  | middleware.exceptions:global_exception_handler:26 - 响应: 404
2025-09-25 11:44:20.341 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/docs
2025-09-25 11:44:21.109 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/openapi.json
2025-09-25 11:44:24.250 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/sync
2025-09-25 11:44:24.410 | CRITICAL | middleware.exceptions:global_exception_handler:44 - 未知异常: 1 validation error for BlogElastic
Input should be a valid dictionary or instance of BlogElastic [type=model_type, input_value=(591259203186757, 'MyBati...xe3\x80\x82</font>\n\n'), input_type=Row]
For further information visit https://errors.pydantic.dev/2.11/v/model_type
2025-09-25 11:45:40.490 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/sync
2025-09-25 11:45:40.555 | CRITICAL | middleware.exceptions:global_exception_handler:44 - 未知异常: You must set the config attribute `from_attributes=True` to use from_orm
2025-09-25 11:46:36.849 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/sync
2025-09-25 11:46:36.917 | CRITICAL | middleware.exceptions:global_exception_handler:44 - 未知异常: list.count() takes exactly one argument (0 given)
2025-09-25 11:47:47.735 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/sync
2025-09-25 13:02:12.322 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/sync
2025-09-25 13:07:05.987 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/sync
2025-09-25 13:09:49.942 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/sync
2025-09-25 13:11:29.949 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/sync
2025-09-25 13:12:05.262 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/sync
2025-09-25 13:20:22.224 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/sync
2025-09-25 13:20:22.403 | INFO  | service.blog_elastic_service:sync_all_blog:50 - 成功同步 13 条博客到 Elasticsearch
2025-09-25 13:21:18.623 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/sync
2025-09-25 13:21:18.753 | INFO  | service.blog_elastic_service:sync_all_blog:50 - 成功同步 13 条博客到 Elasticsearch
2025-09-25 13:26:43.033 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/docs
2025-09-25 13:26:43.260 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/openapi.json
2025-09-25 13:26:51.271 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=%E6%A1%86%E6%9E%B6
2025-09-25 13:26:51.272 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': '框架'}
2025-09-25 13:27:28.435 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=%E6%A1%86%E6%9E%B6
2025-09-25 13:27:28.436 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': '框架'}
2025-09-25 13:28:02.588 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=%E6%A1%86%E6%9E%B6
2025-09-25 13:28:02.589 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': '框架'}
2025-09-25 13:28:26.051 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=%E6%A1%86%E6%9E%B6
2025-09-25 13:28:26.051 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': '框架'}
2025-09-25 13:29:14.437 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=%E6%A1%86%E6%9E%B6
2025-09-25 13:29:14.438 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': '框架'}
2025-09-25 13:30:29.031 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=%E6%A1%86%E6%9E%B6
2025-09-25 13:30:29.031 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': '框架'}
2025-09-25 13:34:01.586 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=%E6%A1%86%E6%9E%B6
2025-09-25 13:34:01.587 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': '框架'}
2025-09-25 13:34:20.735 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=%E6%A1%86%E6%9E%B6
2025-09-25 13:34:20.735 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': '框架'}
2025-09-25 13:38:11.466 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=%E6%A1%86%E6%9E%B6
2025-09-25 13:38:11.466 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': '框架'}
2025-09-25 13:38:15.478 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/docs
2025-09-25 13:38:15.663 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/openapi.json
2025-09-25 13:38:20.698 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=%E6%A1%86%E6%9E%B6
2025-09-25 13:38:20.699 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': '框架'}
2025-09-25 13:40:27.142 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=%E6%A1%86%E6%9E%B6
2025-09-25 13:40:27.142 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': '框架'}
2025-09-25 13:43:19.045 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=Spring
2025-09-25 13:43:19.045 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': 'Spring'}
2025-09-25 13:47:02.900 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-25 13:47:02.946 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-25 13:47:02.946 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-25 13:47:03.063 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-25 13:48:14.267 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-25 13:48:14.271 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-25 13:48:14.272 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-25 13:48:14.291 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-25 13:51:19.419 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/condition?year=2025
2025-09-25 13:51:19.420 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'year': '2025'}
2025-09-25 13:51:21.402 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/category
2025-09-25 13:55:21.251 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-25 13:55:21.252 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/category
2025-09-25 13:55:21.285 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-25 13:55:22.087 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/condition?year=2025
2025-09-25 13:55:22.087 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'year': '2025'}
2025-09-25 13:56:07.890 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-25 13:56:07.891 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/condition?year=2025
2025-09-25 13:56:07.891 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'year': '2025'}
2025-09-25 13:56:07.916 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-25 13:56:10.251 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-25 13:56:10.252 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/condition?year=2025
2025-09-25 13:56:10.252 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'year': '2025'}
2025-09-25 13:56:10.276 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-25 13:57:22.388 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-25 13:57:22.389 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/condition?year=2025
2025-09-25 13:57:22.390 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'year': '2025'}
2025-09-25 13:57:22.428 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-25 13:57:23.517 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-25 13:57:23.519 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/condition?year=2025
2025-09-25 13:57:23.519 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'year': '2025'}
2025-09-25 13:57:23.553 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-25 14:06:40.887 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-25 14:06:40.923 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-25 14:06:42.166 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-25 14:06:42.194 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-25 14:06:47.716 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-25 14:06:47.762 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-25 14:07:28.984 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-25 14:07:29.031 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-25 14:27:09.163 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-25 14:27:09.192 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-25 14:27:26.494 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/condition?year=2025
2025-09-25 14:27:26.494 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'year': '2025'}
2025-09-25 14:29:40.269 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-25 14:29:40.286 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-25 14:30:40.527 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-25 14:30:40.556 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-25 14:30:40.637 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-25 14:30:40.652 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-25 14:31:44.236 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-25 14:31:44.249 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-25 14:34:54.316 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-25 14:34:54.333 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-25 14:34:58.160 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-25 14:34:58.198 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-25 14:35:07.966 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=dd
2025-09-25 14:35:07.967 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': 'dd'}
2025-09-25 14:35:22.188 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=%E6%A1%86%E6%9E%B6
2025-09-25 14:35:22.188 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': '框架'}
2025-09-25 14:35:40.918 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-25 14:35:40.956 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-25 14:35:48.222 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=%E6%A1%86%E6%9E%B6
2025-09-25 14:35:48.222 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': '框架'}
2025-09-25 14:38:13.931 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-25 14:38:13.970 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-25 14:39:00.228 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-25 14:39:00.242 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-25 14:39:06.442 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-25 14:39:06.491 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-25 14:39:16.760 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-25 14:39:16.861 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-25 14:39:19.369 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=%E6%98%AF
2025-09-25 14:39:19.370 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': '是'}
2025-09-25 14:39:26.761 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-25 14:39:26.822 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-25 14:41:32.350 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=%E5%8D%95%E7%8B%AC
2025-09-25 14:41:32.350 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': '单独'}
2025-09-25 14:41:35.148 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=%E5%8D%95
2025-09-25 14:41:35.148 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': '单'}
2025-09-25 14:41:35.643 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=1
2025-09-25 14:41:35.644 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': '1'}
2025-09-25 14:41:47.057 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-25 14:41:47.111 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-25 14:41:48.341 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=%E9%97%AE%E9%97%AE
2025-09-25 14:41:48.341 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': '问问'}
2025-09-25 14:41:49.268 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=%E9%97%AE
2025-09-25 14:41:49.269 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': '问'}
2025-09-25 14:41:49.447 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=
2025-09-25 14:41:49.447 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': ''}
2025-09-25 14:41:49.875 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=%E6%88%91
2025-09-25 14:41:49.876 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': '我'}
2025-09-25 14:41:51.018 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=
2025-09-25 14:41:51.018 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': ''}
2025-09-25 14:41:52.360 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=%E6%A1%86%E6%9E%B6
2025-09-25 14:41:52.360 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': '框架'}
2025-09-25 14:41:53.388 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=%E6%A1%86
2025-09-25 14:41:53.389 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': '框'}
2025-09-25 14:41:54.484 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=
2025-09-25 14:41:54.484 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': ''}
2025-09-25 14:42:07.744 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=%E6%A1%86%E6%9E%B6
2025-09-25 14:42:07.744 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': '框架'}
2025-09-25 14:42:09.517 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=
2025-09-25 14:42:09.518 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': ''}
2025-09-25 14:42:22.609 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=%E7%9A%84
2025-09-25 14:42:22.609 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': '的'}
2025-09-25 14:45:38.620 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=%E6%88%91
2025-09-25 14:45:38.620 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': '我'}
2025-09-25 14:45:40.520 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=%E4%BD%A0
2025-09-25 14:45:40.520 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': '你'}
2025-09-25 14:46:17.291 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=%E6%98%AF
2025-09-25 14:46:17.292 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': '是'}
2025-09-25 14:46:26.237 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-25 14:46:26.256 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-25 14:46:29.766 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=%E6%98%AF
2025-09-25 14:46:29.766 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': '是'}
2025-09-25 14:46:33.114 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-25 14:46:33.135 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-25 14:46:34.508 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=%E6%98%AF
2025-09-25 14:46:34.508 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': '是'}
2025-09-25 14:46:57.691 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-25 14:46:57.737 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-25 14:46:58.594 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=%E6%98%AF
2025-09-25 14:46:58.595 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': '是'}
2025-09-25 14:47:04.608 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-25 14:47:04.627 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-25 14:47:06.837 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-25 14:47:06.896 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-25 14:47:08.113 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=%E6%98%AF
2025-09-25 14:47:08.113 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': '是'}
2025-09-25 14:48:59.162 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-25 14:48:59.223 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-25 14:49:00.880 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=%E6%98%AF
2025-09-25 14:49:00.880 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': '是'}
2025-09-25 14:51:02.407 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-25 14:51:02.433 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-25 14:51:03.966 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=%E6%98%AF
2025-09-25 14:51:03.966 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': '是'}
2025-09-25 14:53:00.197 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-25 14:53:00.251 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-25 14:53:01.530 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=%E6%98%AF
2025-09-25 14:53:01.530 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': '是'}
2025-09-25 14:54:26.078 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-25 14:54:26.186 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-25 14:54:30.854 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=%E6%98%AF
2025-09-25 14:54:30.854 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': '是'}
2025-09-25 14:54:42.278 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-25 14:54:42.306 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-25 14:54:43.851 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=%E6%98%AF
2025-09-25 14:54:43.851 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': '是'}
2025-09-25 14:56:17.101 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=%E6%A1%86%E6%9E%B6
2025-09-25 14:56:17.102 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': '框架'}
2025-09-25 14:56:22.995 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/content/:591259203186757
2025-09-25 14:56:22.997 | WARNING  | middleware.exceptions:global_exception_handler:26 - 响应: 422
2025-09-25 14:56:30.426 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-25 14:56:30.426 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-25 14:56:54.085 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-25 14:56:54.159 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-25 14:56:56.193 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=%E6%A1%86%E6%9E%B6
2025-09-25 14:56:56.193 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': '框架'}
2025-09-25 14:57:03.178 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-25 14:57:03.194 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-25 14:57:04.483 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-25 14:57:04.483 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-25 14:57:07.503 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/content/631305371107398
2025-09-25 14:57:07.541 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/comment/631305371107398
2025-09-25 14:57:29.779 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-25 14:57:29.780 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-25 14:57:29.780 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-25 14:57:29.801 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-25 14:57:31.697 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/content/631305371107398
2025-09-25 14:57:31.716 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/comment/631305371107398
2025-09-25 14:57:39.093 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=%E6%A1%86%E6%9E%B6
2025-09-25 14:57:39.093 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': '框架'}
2025-09-25 14:57:40.678 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/content/676185644712005
2025-09-25 14:57:40.693 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/comment/676185644712005
2025-09-25 14:58:06.963 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=%E4%BD%A0
2025-09-25 14:58:06.963 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': '你'}
2025-09-25 14:59:27.179 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-25 14:59:27.241 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-25 14:59:31.417 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/condition?year=2025
2025-09-25 14:59:31.418 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'year': '2025'}
2025-09-25 14:59:34.828 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=%E4%BD%A0%E5%A5%BD
2025-09-25 14:59:34.829 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': '你好'}
2025-09-25 14:59:35.815 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=%E4%BD%A0
2025-09-25 14:59:35.815 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': '你'}
2025-09-25 14:59:37.358 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/condition?year=2025
2025-09-25 14:59:37.359 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'year': '2025'}
2025-09-25 14:59:49.964 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-25 14:59:50.045 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-25 14:59:50.680 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/condition?year=2025
2025-09-25 14:59:50.680 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'year': '2025'}
2025-09-25 14:59:52.852 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=%E4%BD%A0
2025-09-25 14:59:52.853 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': '你'}
2025-09-25 14:59:54.375 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/condition?year=2025
2025-09-25 14:59:54.375 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'year': '2025'}
2025-09-25 15:00:09.535 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-25 15:00:09.536 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-25 22:49:58.584 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/
2025-09-25 22:50:00.691 | WARNING  | middleware.exceptions:global_exception_handler:26 - 响应: 404
2025-09-25 22:50:02.808 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/docs
2025-09-25 22:50:09.497 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/openapi.json
2025-09-25 22:50:16.478 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-25 22:50:18.553 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-25 22:50:20.723 | CRITICAL | middleware.exceptions:global_exception_handler:38 - 数据库异常: (pymysql.err.OperationalError) (2003, "Can't connect to MySQL server on 'host.docker.internal' ([Errno 11001] getaddrinfo failed)")
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2025-09-25 22:50:51.042 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-25 22:50:53.126 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-25 22:50:55.241 | CRITICAL | middleware.exceptions:global_exception_handler:38 - 数据库异常: (pymysql.err.OperationalError) (1045, "Access denied for user 'root'@'localhost' (using password: YES)")
(Background on this error at: https://sqlalche.me/e/20/e3q8)
2025-09-25 22:51:09.586 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-25 22:51:11.676 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-25 22:52:58.339 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-25 22:53:01.352 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-25 22:54:16.612 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-25 22:54:16.622 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-25 22:57:08.357 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-25 22:57:08.357 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-25 22:57:58.433 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-25 22:57:58.433 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-25 23:03:57.445 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-25 23:03:57.445 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-25 23:04:29.198 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-25 23:04:29.198 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-25 23:11:27.170 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-25 23:11:27.171 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-25 23:17:14.162 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-25 23:17:14.164 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-25 23:18:42.029 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-25 23:18:42.029 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-25 23:20:09.630 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-25 23:20:09.668 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-25 23:22:00.941 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-25 23:22:00.942 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-26 16:03:42.517 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-26 16:03:42.537 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-26 16:03:42.537 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-26 16:03:42.703 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-26 16:09:59.841 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-26 16:09:59.842 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-26 16:09:59.842 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-26 16:09:59.888 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-26 16:11:17.113 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/content/631305371107398
2025-09-26 16:11:17.180 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/comment/631305371107398
2025-09-26 16:11:40.642 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-26 16:11:40.702 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/content/631305371107398
2025-09-26 16:11:40.714 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/comment/631305371107398
2025-09-26 16:11:40.814 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-26 16:13:45.814 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: PUT http://127.0.0.1:8082/blog/comment
2025-09-26 16:13:45.816 | WARNING  | middleware.exceptions:global_exception_handler:26 - 响应: 401
2025-09-26 16:13:46.054 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-26 16:13:46.057 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-26 16:13:46.058 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-26 16:13:46.071 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-26 16:13:52.974 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/content/631305371107398
2025-09-26 16:13:53.166 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/comment/631305371107398
2025-09-26 16:14:06.274 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: PUT http://127.0.0.1:8082/blog/comment
2025-09-26 16:14:06.275 | WARNING  | middleware.exceptions:global_exception_handler:26 - 响应: 401
2025-09-26 16:14:06.935 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-26 16:14:06.944 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-26 16:14:06.945 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-26 16:14:06.963 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-26 16:14:57.178 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/content/631305371107398
2025-09-26 16:14:57.374 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/comment/631305371107398
2025-09-26 16:17:51.796 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/docs
2025-09-26 16:17:52.677 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/openapi.json
2025-09-26 16:19:00.119 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: PUT http://127.0.0.1:8082/blog/comment
2025-09-26 16:19:00.122 | WARNING  | middleware.exceptions:global_exception_handler:26 - 响应: 401
2025-09-26 16:21:45.316 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-26 16:21:45.316 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-26 16:24:29.117 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: PUT http://127.0.0.1:8082/blog/comment
2025-09-26 16:24:29.138 | WARNING  | middleware.exceptions:global_exception_handler:26 - 响应: 401
2025-09-26 16:28:18.003 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/docs
2025-09-26 16:28:18.241 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/openapi.json
2025-09-26 16:28:28.641 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: PUT http://127.0.0.1:8082/blog/comment
2025-09-26 16:28:28.644 | WARNING  | middleware.exceptions:global_exception_handler:26 - 响应: 401
2025-09-26 16:29:07.075 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/comment/0
2025-09-26 16:29:15.253 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/comment/631305371107398
2025-09-26 16:34:33.316 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/docs
2025-09-26 16:34:33.446 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/openapi.json
2025-09-26 16:34:34.795 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/docs
2025-09-26 16:34:34.853 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/openapi.json
2025-09-26 16:34:35.378 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/docs
2025-09-26 16:34:35.437 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/openapi.json
2025-09-26 16:34:38.667 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: PUT http://127.0.0.1:8082/blog/comment
2025-09-26 16:34:38.670 | WARNING  | middleware.exceptions:global_exception_handler:26 - 响应: 401
2025-09-26 16:36:52.062 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: PUT http://127.0.0.1:8082/blog/comment
2025-09-26 16:36:52.106 | WARNING  | middleware.exceptions:global_exception_handler:26 - 响应: 422
2025-09-26 16:37:21.688 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: PUT http://127.0.0.1:8082/blog/comment
2025-09-26 16:37:21.724 | WARNING  | middleware.exceptions:global_exception_handler:26 - 响应: 422
2025-09-26 16:51:46.676 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: PUT http://127.0.0.1:8082/blog/comment
2025-09-26 16:51:46.678 | WARNING  | middleware.exceptions:global_exception_handler:26 - 响应: 422
2025-09-26 16:52:11.046 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/docs
2025-09-26 16:52:11.200 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/openapi.json
2025-09-26 16:52:17.101 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: PUT http://127.0.0.1:8082/blog/comment
2025-09-26 16:52:17.106 | WARNING  | middleware.exceptions:global_exception_handler:26 - 响应: 422
2025-09-26 16:52:44.449 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: PUT http://127.0.0.1:8082/blog/comment
2025-09-26 16:52:44.466 | WARNING  | middleware.exceptions:global_exception_handler:26 - 响应: 422
2025-09-26 16:53:10.411 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: PUT http://127.0.0.1:8082/blog/comment
2025-09-26 16:53:10.449 | WARNING  | middleware.exceptions:global_exception_handler:26 - 响应: 422
2025-09-26 16:54:22.147 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: PUT http://127.0.0.1:8082/blog/comment
2025-09-26 16:54:22.193 | WARNING  | middleware.exceptions:global_exception_handler:26 - 响应: 422
2025-09-26 16:54:23.444 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: PUT http://127.0.0.1:8082/blog/comment
2025-09-26 16:54:23.447 | WARNING  | middleware.exceptions:global_exception_handler:26 - 响应: 422
2025-09-26 17:04:46.164 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-26 17:04:46.298 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/content/631305371107398
2025-09-26 17:04:46.300 | WARNING  | middleware.exceptions:global_exception_handler:26 - 响应: 404
2025-09-26 17:04:46.371 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-26 17:04:46.425 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/content/631305371107398
2025-09-26 17:04:46.426 | WARNING  | middleware.exceptions:global_exception_handler:26 - 响应: 404
2025-09-26 17:04:46.428 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-26 17:04:46.449 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-26 17:05:24.904 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-26 17:05:24.955 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/content/631305371107398
2025-09-26 17:05:24.956 | WARNING  | middleware.exceptions:global_exception_handler:26 - 响应: 404
2025-09-26 17:05:24.970 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-26 17:05:55.692 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-26 17:05:55.745 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/content/631305371107398
2025-09-26 17:05:55.746 | WARNING  | middleware.exceptions:global_exception_handler:26 - 响应: 404
2025-09-26 17:05:55.761 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-26 17:06:06.166 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-26 17:06:06.219 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/content/631305371107398
2025-09-26 17:06:06.220 | WARNING  | middleware.exceptions:global_exception_handler:26 - 响应: 404
2025-09-26 17:06:06.233 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-26 17:06:19.470 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-26 17:06:19.476 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/631305371107398/content
2025-09-26 17:06:19.522 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-26 17:06:19.548 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/631305371107398/comment
2025-09-26 17:06:27.196 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: PUT http://127.0.0.1:8082/blog/631305371107398/comment
2025-09-26 17:06:27.276 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/631305371107398/content
2025-09-26 17:06:27.286 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/631305371107398/comment
2025-09-26 17:07:38.586 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-26 17:07:38.586 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-26 17:07:40.042 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-26 17:07:40.043 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-26 17:07:40.044 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-26 17:07:40.062 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-26 17:07:42.579 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/631305371107398/content
2025-09-26 17:07:42.831 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/631305371107398/comment
2025-09-26 17:07:47.930 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: PUT http://127.0.0.1:8082/blog/631305371107398/comment
2025-09-26 17:07:48.043 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/631305371107398/content
2025-09-26 17:07:48.053 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/631305371107398/comment
2025-09-26 17:08:11.749 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: PUT http://127.0.0.1:8082/blog/631305371107398/comment
2025-09-26 17:08:11.808 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/631305371107398/content
2025-09-26 17:08:11.817 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/631305371107398/comment
2025-09-26 17:08:36.260 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: PUT http://127.0.0.1:8082/blog/631305371107398/comment
2025-09-26 17:08:36.355 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/631305371107398/content
2025-09-26 17:08:36.365 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/631305371107398/comment
2025-09-26 17:10:27.472 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-26 17:10:27.473 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/631305371107398/content
2025-09-26 17:10:27.495 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-26 17:10:27.498 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/631305371107398/comment
2025-09-26 17:11:25.564 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-26 17:11:25.565 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/631305371107398/content
2025-09-26 17:11:25.645 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/631305371107398/comment
2025-09-26 17:11:25.646 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-26 17:11:33.777 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: PUT http://127.0.0.1:8082/blog/631305371107398/comment
2025-09-26 17:11:33.850 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/631305371107398/content
2025-09-26 17:11:33.859 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/631305371107398/comment
2025-09-26 17:11:52.370 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: PUT http://127.0.0.1:8082/blog/631305371107398/comment
2025-09-26 17:11:52.449 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/631305371107398/content
2025-09-26 17:11:52.459 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/631305371107398/comment
2025-09-28 16:45:56.908 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-28 16:45:56.937 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 16:45:56.938 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 16:45:57.069 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-28 16:46:03.071 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/category
2025-09-28 16:46:03.776 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 16:46:03.777 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 16:46:05.951 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/631305371107398/content
2025-09-28 16:46:05.987 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/631305371107398/comment
2025-09-28 16:46:31.595 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 16:46:31.595 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 16:46:33.006 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-28 16:46:33.006 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 16:46:33.007 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 16:46:33.022 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-28 16:47:12.257 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-28 16:47:12.258 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 16:47:12.258 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 16:47:12.303 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-28 16:47:14.784 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/631305371107398/content
2025-09-28 16:47:14.902 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/631305371107398/comment
2025-09-28 16:47:18.050 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 16:47:18.051 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 16:47:19.668 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-28 16:47:19.669 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 16:47:19.670 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 16:47:19.692 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-28 16:47:29.187 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-28 16:47:29.203 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 16:47:29.204 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 16:47:29.272 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-28 16:47:31.419 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/631305371107398/content
2025-09-28 16:47:31.443 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/631305371107398/comment
2025-09-28 16:47:59.666 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-28 16:47:59.941 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-28 16:48:07.270 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 16:48:07.271 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 16:48:08.526 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-28 16:48:08.527 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 16:48:08.527 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 16:48:08.545 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-28 16:50:19.796 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-28 16:50:19.895 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-28 16:51:05.805 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-28 16:51:05.920 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/631305371107398/content
2025-09-28 16:51:05.940 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-28 16:51:05.943 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/631305371107398/comment
2025-09-28 16:51:18.654 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: POST http://127.0.0.1:8082/session
2025-09-28 16:51:20.310 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 16:51:20.310 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 16:51:24.671 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/content/631305371107398
2025-09-28 16:51:24.672 | WARNING  | middleware.exceptions:global_exception_handler:26 - 响应: 404
2025-09-28 16:51:32.384 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 16:51:32.384 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 16:51:34.502 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 16:51:34.502 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 16:51:35.825 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/content/631305371107398
2025-09-28 16:51:35.825 | WARNING  | middleware.exceptions:global_exception_handler:26 - 响应: 404
2025-09-28 16:51:44.254 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 16:51:44.255 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 16:52:52.544 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 16:52:52.544 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 16:53:05.540 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 16:53:05.541 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 16:53:08.758 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/631305371107398/content
2025-09-28 16:53:08.769 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/0/comment
2025-09-28 16:53:20.253 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: POST http://127.0.0.1:8082/session
2025-09-28 16:53:21.837 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 16:53:21.838 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 16:53:23.683 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/631305371107398/content
2025-09-28 16:53:23.694 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/0/comment
2025-09-28 16:53:27.278 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 16:53:27.278 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 16:53:29.139 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 16:53:29.139 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 16:53:32.161 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-28 16:53:32.207 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/631305371107398/content
2025-09-28 16:53:32.228 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/631305371107398/comment
2025-09-28 16:53:32.229 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-28 16:54:07.019 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: POST http://127.0.0.1:8082/session
2025-09-28 16:54:13.084 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 16:54:13.084 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 16:54:15.572 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/631305371107398/content
2025-09-28 16:54:15.584 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/0/comment
2025-09-28 16:54:18.198 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 16:54:18.198 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 17:00:01.301 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/stats
2025-09-28 17:00:01.411 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/631305371107398/content
2025-09-28 17:00:01.436 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/latest
2025-09-28 17:00:01.438 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/631305371107398/comment
2025-09-28 17:00:17.224 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: POST http://127.0.0.1:8082/session
2025-09-28 17:00:18.548 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 17:00:18.549 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 17:00:20.049 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/631305371107398/content
2025-09-28 17:00:20.060 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/0/comment
2025-09-28 17:00:22.313 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 17:00:22.313 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 17:30:42.553 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: POST http://127.0.0.1:8082/session
2025-09-28 17:31:07.575 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 17:31:10.589 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 17:31:13.605 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 17:31:16.615 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 18:18:58.591 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 18:18:58.603 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 18:19:51.206 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: POST http://127.0.0.1:8082/session
2025-09-28 18:19:55.103 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 18:19:55.103 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 18:19:56.439 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/631305371107398/content
2025-09-28 18:19:56.451 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/0/comment
2025-09-28 18:19:58.707 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 18:19:58.708 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 18:20:39.477 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: POST http://127.0.0.1:8082/session
2025-09-28 18:20:39.494 | ERROR  | middleware.exceptions:global_exception_handler:32 - 业务异常: 密码错误 - 详情: None
2025-09-28 18:20:43.789 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: POST http://127.0.0.1:8082/session
2025-09-28 18:20:45.916 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 18:20:45.916 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 18:20:47.327 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/631305371107398/content
2025-09-28 18:20:47.338 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/0/comment
2025-09-28 18:20:48.979 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 18:20:48.980 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 18:24:43.315 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/category
2025-09-28 18:24:44.236 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 18:24:44.237 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 18:24:46.075 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/694197446615109/content
2025-09-28 18:24:46.118 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/0/comment
2025-09-28 18:24:47.897 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 18:24:47.898 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 18:25:50.326 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 18:25:50.326 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 18:25:51.641 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 18:25:51.642 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 18:26:29.481 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 18:26:29.482 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 18:27:28.567 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 18:27:28.567 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 18:28:41.164 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/visit?currentPage=1&pageSize=15
2025-09-28 18:28:41.165 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '15'}
2025-09-28 18:28:43.293 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/visit?currentPage=2&pageSize=15
2025-09-28 18:28:43.293 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '2', 'pageSize': '15'}
2025-09-28 18:28:44.483 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/visit?currentPage=1&pageSize=15
2025-09-28 18:28:44.483 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '15'}
2025-09-28 18:28:47.358 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/visit?currentPage=5&pageSize=15
2025-09-28 18:28:47.358 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '5', 'pageSize': '15'}
2025-09-28 18:28:50.937 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/visit?currentPage=1&pageSize=15
2025-09-28 18:28:50.937 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '15'}
2025-09-28 18:28:56.655 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 18:28:56.656 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 18:29:01.109 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 18:29:01.110 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 18:29:02.991 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 18:29:02.992 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 18:29:04.513 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 18:29:04.513 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 18:29:08.015 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 18:29:08.016 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 18:33:59.860 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 18:33:59.861 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 18:34:01.710 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 18:34:01.710 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 18:35:56.072 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 18:35:56.083 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 18:35:56.116 | CRITICAL | middleware.exceptions:global_exception_handler:44 - 未知异常: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods
2025-09-28 19:19:14.537 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/docs
2025-09-28 19:19:14.734 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/openapi.json
2025-09-28 19:19:18.138 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 19:19:18.139 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 19:19:18.148 | CRITICAL | middleware.exceptions:global_exception_handler:44 - 未知异常: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods
2025-09-28 19:22:51.280 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 19:22:51.281 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 19:22:51.284 | CRITICAL | middleware.exceptions:global_exception_handler:44 - 未知异常: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods
2025-09-28 19:25:30.370 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 19:25:30.371 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 19:25:30.374 | CRITICAL | middleware.exceptions:global_exception_handler:44 - 未知异常: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods
2025-09-28 19:28:28.382 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 19:28:28.382 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 19:28:28.385 | CRITICAL | middleware.exceptions:global_exception_handler:44 - 未知异常: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods
2025-09-28 19:32:53.616 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 19:32:53.617 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 19:32:53.620 | CRITICAL | middleware.exceptions:global_exception_handler:44 - 未知异常: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods
2025-09-28 19:34:44.707 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 19:34:44.707 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 19:34:44.710 | CRITICAL | middleware.exceptions:global_exception_handler:44 - 未知异常: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods
2025-09-28 19:38:22.706 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 19:38:22.707 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 19:38:22.728 | CRITICAL | middleware.exceptions:global_exception_handler:44 - 未知异常: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods
2025-09-28 19:39:50.001 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 19:39:50.001 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 19:39:50.005 | CRITICAL | middleware.exceptions:global_exception_handler:44 - 未知异常: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods
2025-09-28 19:41:24.798 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 19:41:24.799 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 19:41:24.826 | CRITICAL | middleware.exceptions:global_exception_handler:44 - 未知异常: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods
2025-09-28 19:43:01.412 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 19:43:01.412 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 19:43:01.418 | CRITICAL | middleware.exceptions:global_exception_handler:44 - 未知异常: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods
2025-09-28 19:44:15.925 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 19:44:15.925 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 19:44:15.928 | CRITICAL | middleware.exceptions:global_exception_handler:44 - 未知异常: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods
2025-09-28 19:44:27.896 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 19:44:27.897 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 19:44:27.901 | CRITICAL | middleware.exceptions:global_exception_handler:44 - 未知异常: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods
2025-09-28 19:44:28.915 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-28 19:44:28.915 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-28 19:44:28.933 | CRITICAL | middleware.exceptions:global_exception_handler:44 - 未知异常: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods
2025-09-29 09:24:08.763 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/docs
2025-09-29 09:24:08.998 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/openapi.json
2025-09-29 09:24:17.059 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-29 09:24:17.060 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-29 09:46:13.912 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-29 09:46:13.927 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-29 09:47:38.224 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-29 09:47:38.237 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-29 09:50:21.389 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-29 09:50:21.402 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-29 09:50:21.403 | INFO  | service.blog_service:query_blog_by_page:20 - Cxxx
2025-09-29 09:50:35.920 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/docs
2025-09-29 09:50:36.069 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/openapi.json
2025-09-29 09:50:38.521 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-29 09:50:38.521 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-29 09:50:38.523 | INFO  | service.blog_service:query_blog_by_page:20 - Cxxx
2025-09-29 09:51:10.682 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-29 09:51:10.692 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-29 09:51:10.695 | INFO  | service.blog_service:query_blog_by_page:20 - Cxxx
2025-09-29 09:51:13.397 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-29 09:51:13.397 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-29 09:51:13.399 | INFO  | service.blog_service:query_blog_by_page:20 - Cxxx
2025-09-29 09:51:54.908 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-29 09:51:54.930 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-29 09:51:54.933 | INFO  | service.blog_service:query_blog_by_page:20 - Cxxx
2025-09-29 09:51:57.821 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-29 09:51:57.821 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-29 09:51:57.823 | INFO  | service.blog_service:query_blog_by_page:20 - Cxxx
2025-09-29 09:52:17.305 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-29 09:52:17.329 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-29 09:52:17.332 | INFO  | service.blog_service:query_blog_by_page:20 - Cxxx
2025-09-29 09:52:17.333 | ERROR  | service.blog_service:query_blog_by_page:21 - C213123xxx
2025-09-29 09:52:18.672 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-29 09:52:18.672 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-29 09:52:18.674 | INFO  | service.blog_service:query_blog_by_page:20 - Cxxx
2025-09-29 09:52:18.674 | ERROR  | service.blog_service:query_blog_by_page:21 - C213123xxx
2025-09-29 09:54:43.930 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-29 09:54:43.930 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-29 09:54:43.933 | INFO  | service.blog_service:query_blog_by_page:20 - Cxxx
2025-09-29 09:54:43.933 | ERROR  | service.blog_service:query_blog_by_page:21 - C213123xxx
2025-09-29 09:54:46.330 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-29 09:54:46.331 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-29 09:54:46.333 | INFO  | service.blog_service:query_blog_by_page:20 - Cxxx
2025-09-29 09:54:46.333 | ERROR  | service.blog_service:query_blog_by_page:21 - C213123xxx
2025-09-29 09:55:05.250 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-29 09:55:05.250 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-29 09:55:05.252 | INFO  | service.blog_service:query_blog_by_page:20 - Cxxx
2025-09-29 09:55:05.252 | ERROR  | service.blog_service:query_blog_by_page:21 - C213123xxx
2025-09-29 09:55:06.964 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-29 09:55:06.964 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-29 09:55:06.966 | INFO  | service.blog_service:query_blog_by_page:20 - Cxxx
2025-09-29 09:55:06.966 | ERROR  | service.blog_service:query_blog_by_page:21 - C213123xxx
2025-09-29 09:55:07.783 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-29 09:55:07.784 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-29 09:55:07.786 | INFO  | service.blog_service:query_blog_by_page:20 - Cxxx
2025-09-29 09:55:07.786 | ERROR  | service.blog_service:query_blog_by_page:21 - C213123xxx
2025-09-29 09:55:08.244 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10
2025-09-29 09:55:08.244 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'currentPage': '1', 'pageSize': '10'}
2025-09-29 09:55:08.246 | INFO  | service.blog_service:query_blog_by_page:20 - Cxxx
2025-09-29 09:55:08.246 | ERROR  | service.blog_service:query_blog_by_page:21 - C213123xxx
2025-09-29 09:55:26.661 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=21323
2025-09-29 09:55:26.661 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': '21323'}
2025-09-29 09:55:26.679 | CRITICAL | middleware.exceptions:global_exception_handler:44 - 未知异常: BadRequestError(400, 'search_phase_execution_exception', 'failed to create query: Cannot invoke "org.wltea.analyzer.dic.DictSegment.match(char[], int, int)" because "org.wltea.analyzer.dic.Dictionary.singleton._StopWords" is null')
2025-09-29 09:56:20.140 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=21323
2025-09-29 09:56:20.140 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': '21323'}
2025-09-29 09:56:22.378 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=21323
2025-09-29 09:56:22.378 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': '21323'}
2025-09-29 09:56:57.739 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=21323
2025-09-29 09:56:57.739 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': '21323'}
2025-09-29 09:56:57.755 | CRITICAL | middleware.exceptions:global_exception_handler:44 - 未知异常: BadRequestError(400, 'search_phase_execution_exception', 'failed to create query: Cannot invoke "org.wltea.analyzer.dic.DictSegment.match(char[], int, int)" because "org.wltea.analyzer.dic.Dictionary.singleton._StopWords" is null')
2025-09-29 09:57:24.317 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=21323
2025-09-29 09:57:24.317 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': '21323'}
2025-09-29 09:57:24.334 | CRITICAL | middleware.exceptions:global_exception_handler:44 - 未知异常: BadRequestError(400, 'search_phase_execution_exception', 'failed to create query: Cannot invoke "org.wltea.analyzer.dic.DictSegment.match(char[], int, int)" because "org.wltea.analyzer.dic.Dictionary.singleton._StopWords" is null')
2025-09-29 09:57:25.184 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=21323
2025-09-29 09:57:25.184 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': '21323'}
2025-09-29 09:57:25.199 | CRITICAL | middleware.exceptions:global_exception_handler:44 - 未知异常: BadRequestError(400, 'search_phase_execution_exception', 'failed to create query: Cannot invoke "org.wltea.analyzer.dic.DictSegment.match(char[], int, int)" because "org.wltea.analyzer.dic.Dictionary.singleton._StopWords" is null')
2025-09-29 09:58:14.518 | INFO  | middleware.exceptions:global_exception_handler:18 - 请求: GET http://127.0.0.1:8082/blog/search?keyword=21323
2025-09-29 09:58:14.518 | INFO  | middleware.exceptions:global_exception_handler:20 - 查询参数: {'keyword': '21323'}
2025-09-29 09:58:14.531 | CRITICAL | middleware.exceptions:global_exception_handler:44 - 未知异常: BadRequestError(400, 'search_phase_execution_exception', 'failed to create query: Cannot invoke "org.wltea.analyzer.dic.DictSegment.match(char[], int, int)" because "org.wltea.analyzer.dic.Dictionary.singleton._StopWords" is null')