{oH{~+ zjy5Hh8UcxpBoU%x+^IWd8JVbyUFevknH1U%PSlGe_QZ1_j;CK&wPF>pxdx+lFe#5+ zo;7U*%{8+I1(yQY3?@b?m=k*hv%Or2GPm_4viLQO>YGD@)Dc39q}!dP97P-|<}9Pe zQ~?c<$s2qO4d;>Bys@P}{ye>7UOqLKPc_qF0L!U9A~_-%kQS=@8*vNL)w}lwGD5U6 z26KL=b>JSbYy4*!#=o{{JzX13x)|F(pKqtAPCUyuwB8U+yXl*H347;lrK8^C4}m~C zrCuhkCyL0*U5HpCJIc!5Y};j-$Tq6F?Mh4KC1fGrGPV(=Llg~jKR#X1_>K7`DB0c3 z>9cuDpDeO;n@{VCdjr=5eMd6;wTMB_G$yfzZPTMY}wEs@KVp zrjyBXdyhOMgi@`{8leAJ*4pH5Uz5{zIZBtSo8bj8lq8>wky90}a&Qgdy2E`Gpe?i6 zB;NxFCCZ`2HcXB*nqk4jZCnHWKESKL<@h{&K7jRf&FC#TyNYzw^O2+t+KJz~CYy%Q zjgp9s(%QN#A7H!qK5X2GV;KC{-)qC&_Yqsp=Uw{Z@Qe5g6H!)(T3t4(#OH*#*(g?H zO
1MXqpz2)GwRb)!&4~`YPtbspu;TgTJCZ8 zfct{$;Aajw+9K~Ls%L7Phz3h0XnidyN+ @y>7fuyI6lf_Dst^?)8m$=3j=h@+o}Iz=bko&L z)e^2f0umKyQ^A2tR3xs51OEVLU(urE#2qBc^CVT)BR{`Szvth3Q}lWvg7w1Rf9&-f zg#I+b>asw11GXFkp@?FRB6AXsa}p73c#B)P9oa2!b0>Erx8)t~<$mPnK@_yI%fq}A zbz0uz-Mkm|fcF_06B^L)OFQaQd>aiqr;rQX8er{xz&@{-RKNyr@?!E)CNm>+MV$Q9}e(c8v~kV}aILxRg+^G`8|;`w$OF z<20`FYqAKaeT2c!Q( Wab+G6kA&fpo z)8}lY*6x0SQ4?Y`?}KICSkxuz*4`sTy*hk^zJr`!U !Wo`H9QbV*zp3+#o1q$B zaERZ9_T5BHr|tmk{;m1er@IE(-L#l0fNl5XA$?_VWgdPA&~9Hd&}wvw0fvF2Nmgo7 zNbQY8F$24{Dv^O?I+M}LAothTPnM6rUq1YHdHlHA1jWhmZ>QfJpBz6~{`%GOho4V= z`SI%WgUgx-rky-d>7KcSYr9O;o^T;RdwVRQOh|1(Hw8>6(pCm#I1^D+r7+_uJVR__ z>L--OZ3TDCq-ZxS@*K|KqRqZ2I3FeHXTmoTPRa|(23-*tDS*M?@su4Xv0*MXkI>=8 zV2Pg5_6=EYO)I$w9cj$8FPJQgsboJPaRq$-x$*YZ;adj>!*?=uvl_iGihY(UIW&>m z=My~4GfFv|C4#m3xUD|E(C(CX_0~nM6-x(F$X9`o` )W6; zdLM6M|33MTJl%BqmW{ ?77uzBotyd~L zH^(j8_U5c-YcM|JY_dZWm5dSyGY!&PE6-ui{yN!qp{=7uYlXaMg8bK@j*7F_&Cp4M QxsTv2q>I PW%O2=Sm%=cTSZmc(ZmAgFuWlv-3XYy?Jkb z?`@RNXAz7KO20J@q!IdE5&c64;(eHL0~U%X_ECT>91x2Hnx$dIBfcJ_tW>hsd?PR| zGui8YI>=ZVj7}h$qQ(_O4VGQjtO05=JWFVrX0GT~j%FDFYJlc|%F}!el?qS58!Bni ztg`bh77Ll5n3_6WUT|4ccu^>gSU92;m$1xzSUXjzvbY(AF#~!}?aaw>-)*p9vCMhI zfo1qnz0SC+Z1#_x*j@rILl&mUB5+f}G`NpO^(!e$rx@;I$lQ3dx#PYf&49(RQ)jN$ zXHe}4%wsU)L0H zZrIh1eVa9J`gg(PdZwmA+rjWHcatm+;U+ot9TEC4k zg1ydPPUM Yt?e8=!5{l%jVu$uzu!jzoIV#^@s8 zcj*<-%21=N&1J!-3EzQjpCTvna|I<)T$)}ZG_wL04D>Phx~P4s)q3A~3^w;HwtF^* zl9PipEB3avW&FP PqL)wXv?! }qP1T+x&B~t<%iCr)y>tF$G@y~?mXQ3@virW@|B3! zR+RZ0_d1_neX@M-$+a6>>+1^f%F-_4OZ&J9#-#3rvyn6cCK?fyT8sNK2i4CP?WV(> zAeK7yT*04Lx+Z`=^ul@vX71*x2xqdXUnxIZYa^g zMD!MjCM#3rYGwSST`N~VDp&1twR)<`hm}%hr|L^OS3${)>-fGMvIQa2yw`XnX8))K z`9j@~&N;rlQ958TcV*DE=Z+ultGK(C9Ru#quaZr* QFx2w>8%2wc-E_rsy~B5k-{H;O)aXHk|ZY% e|MlMKce~B;J-|7NRXoEe2d|dHgL=Undi5_byyWfx literal 0 HcmV?d00001 diff --git a/middleware/exceptions.py b/middleware/exceptions.py index 8013846..1fdbf50 100644 --- a/middleware/exceptions.py +++ b/middleware/exceptions.py @@ -35,13 +35,13 @@ async def global_exception_handler(request: Request, call_next): except SQLAlchemyError as e: # 记录数据库异常 - logger.critical(f"数据库异常: {str(e)}", exc_info=True) + #logger.critical(f"数据库异常: {str(e)}", exc_info=True) return JSONResponse(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, content={"message": "数据库操作失败", "details": str(e)}) except Exception as e: # 记录未知异常(带堆栈信息) - logger.critical(f"未知异常: {str(e)}", exc_info=True) + #logger.critical(f"未知异常: {str(e)}", exc_info=True) return JSONResponse(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, content={"code": 500, "message": "服务器内部错误", "details": str(e)}) diff --git a/models/__pycache__/base.cpython-310.pyc b/models/__pycache__/base.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..da65d15a1e7583f1f183c07565979b0a88b1be99 GIT binary patch literal 1968 zcmZ`(OK;pZ5Edn^R?=$M>t_ zEnGaqQU8TRSc2tN!8j{yZWj)B3YWV@i? KW$^K+X_#!xEye}8emd`D|B3I5 !l?^(RpWy zj_jN`d`-3{_vD(0L|61q9kC$#@2nHX@1x$LSVFxexrTZVjNXH5y=4&@z4c4^%H{c0 zv0~&8#oCTFxOahmTZ5MNHmkfTN*zAW##^P5V+q>ZQIM5m?Y~Hr+|3H9Tk=4bYQS_? z$TUwtia1dUP|!&$Jawqzx*6fpeV)`3XJ6n^g-4O^rAZ<4SXFUdCa>kd*6nJlvZ}0g zFqWl+L{)HckL+PQcw51132`P;vT**p&e>y>N{cgLaa%C%NLRK5!{0u2xF_4f5w7vo z7cKPF)83XKyLR#E&J?mDfus1fJkqVK6!I`-bFUC@ 4>-QF{qWqtyFTUT~JUrZcnW>+f(XUWVWUA`DQC^Lo)DjM|RPGg( zkU7fGpyBjLcjH(kqg>AJqbSt$e(3zRGP8PkOJREuz%rQ-#xdU1 loKNW&pi6aNr?Mm=A$~;O&wC zm5G6)y&{=T5t1Roti)I%YP6>k7)y1>c)fPZzBtcnMd11bFRnc#A$sC|gwK&paoqZ7 z{~3;Y7s-F2CA~@8fXhdy1;RNYu(_u;4` @B~6Z*;49>{UzN?2>S=q>HMxiTD24|_)`^%DQ*{6VRy$?& z7V8ou9*L<2!6k8UDH$E<&g?$3se{YK=x8pYgk~_9_yRdHqmGaeCi-@tt>6!|b1U)m z3?+XP$A?Eqly!zhdd_}#jvWL5gWj=&$+zz&-$z~TP)@0|-@EWBPVk7xXGnDGAjum! zXP&W)pf$wtfsTi^&qB=aHB4t-{jYuS1P@(-k1hbZ3ce=t4G|N8n=pKfvhPU#6v_5r zLx=U7Jjv5nvN*b_F%xMpsUS${^&6!jVtP31o{7p1q$x#C?Q=gH50gf{0uzRXO9>`C zp&kJNy-JDYQKPcF9;Q`MRHbP|Jjz6T-9v#=1YJ^H+7d6XTI(;fX3Lje%z!qxWvYYs zYf0rccM&xL-I vN0J43Oi6Z=0bEGC++_*>q R Q-|a<6y fTp_QUiQA9wX7F0nIYC>C)s-%F_{sn#A*W#}~fR{?Bo!N~YhsI#*#{1jZ*}a+h z?Tr0Y%8=kw?)mG`pGisj8$stM3SbXB!7K k|2i}sLHvglM+W=U$hR>kp4!6B!dRaks) zNSw-$71&H2A^2OslRG~#0DIsG{s3W1rc5MLu_Jbr$R}l@kO+y+M9dh>sDNS|X@GP< zDo1fZ1|W^2M2D@;XOc_$I7cZ!xRb$A8c+{OkmN}P=2CnvWA~CY=^+`?3n%vh>LdMR zfTMmuYXGg~XaLYUK ld5 d42Yl!t_$; zy4HkiGp*ozo?WVh8(>xa{#^6gLiPCXgN=nRtKZ)Q*}VE)^^2KsJ!osQ^VM@VK-PbL zP(6QQa0j5B06Pw-|Fl>=dpqoFpIH6;ban2x+KtZ|H%>fWei1P(41c^>yKtwz_-$kE zS`&%gR6uZ5bM|y&ezA6Op?TpUOQJ`^7VyNUQ!F+CD45>%iBD~(SlWWhTwzI@cSv?{ z_wK-8*mp`S!Pomh#ZrYu@qp>AEB6<=72As` z*qz1E{9`9@D$|>A2y^%nojY)C4tK^qS_ks@PjBvGGc5Acwi?Z@WqLkevOGJVXGT8n z`6P64oXqEsgqABb6srK$L9kfGskk;plCyZlFXtyMH?(O4vF-% (k}vpSsX|pWNr5%VlaTT|M=^s;Z*7D067f_gF){(Dgg?P8iEf9r zT>P_h->&iDW5>q#JC*mti4UoN*e+Cpag5aVz^0QtCy)NkIQJuuBrq*)kEZ^N7qFR^wNzN}z0T?ZzkS)IO&o4kTz5XEw$qnLW00lF47 z?f8mO4(IUg-hwAcgTS!00tKN!UH4GD2HKUOAj*saRZ+$Ih=Jfi&>#pp-3W^*mVsL` z?Zq*si*5xmy_GxNzBf Lo7 zT)lFqdi6Lb53h^0^D~d`U#b7H2vsx0Fx2jT)wp@Kdg+G{uVmxb`RapHkI`0?eTRtf zzYa6go4OaIR?P$^E=4}oootFzW{Mv$ZG!qo;f}IMNF7l{G`zP^;hvKi^m9Kv0g@G| zD8A{=1mT+Q3Hk=KD-*OtNep|0k1;6_dPrQ1V@!a+t$T~D8}2TwP$3m~lZ}ow2|j}j zU4sTKLwiQjV>?elgT`?hnm2FMqz`N}q#u$vKwpAaqi>?v2_j5@sGnVE%%5t^-Gj(r zdPA%RV&>7kd$rlSP$9-vPS)>#UB7)vl#Mr9`?O7*GVjZ6+@`^!hu3N+<{b%YIwy=+ z(b058D{mgZ+<16Ka03h7^yW@(Jl%Ny&yL !-%=4}SJE z?N0)eFAHD|E%^h6X-w~FeLc{1`fl`$z8RQ(E3gzcdv@OrY+c*Xn8oa88ne0i)C?S8 zhq=J6!Y;7KO28%VV%!7v*$nWE!X@A`s{mIN_JL A1I&fX#GVmOm2cB2B z0=&RZ0iRNM7Wgzf1AIo|D)3ph2)xLvSii>3-O-xo|AL2FQ )ccTJSkcr-}&G*P1tGJjvWzOuRg z eM#}L!nA&0$=m= z?7g6?krN*4_|+QPKK(qWh&pgX`n3Ob+9+@BnaB4wK9q^YPh*m^G#km((=1(3PvN5C z6h^^nwa~pG@wg? k+n!qqYMRw>_ PlQcVR~{zupv?zeq)3rWEUeh7R(CQlo3u7%1fr>DdjE)JfM)&J zI^sNfGqsTfGchU_Ds8?(eXqhud#e{i(XUa*MKZJ>afu8~JZ&rD90o3;B_vv8CVlcf zXQ=Vw<9!zo<;Qz3%S9783LG?<1rA!^prbO9BNvpS4^nr|MQKr9mUfr;cVam@|24FI zieSDRv56UAkhyz)+LSqyT6@; 2HsI0@X2h#%voljcZ7t?a@pspR$C93@`IZjp!1QYeqioKvVU z8HvkyRJ=i^LFO$ohe1@AA&LA;>VF$%_fpX!hj~W4b99z*+E6sxz@Rz`l`{ P_e=)K9r2Urdz z+GE}U?YSzxnqIMrm5a2+;tGw<`99i_3av)MrjcTwS1~$8*m+HQ;IpbtQNuvMHgk~w z9SGQEE ^A^1S0EYO|iU0rr literal 0 HcmV?d00001 diff --git a/schemas/__pycache__/paginate_query.cpython-310.pyc b/schemas/__pycache__/paginate_query.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1fb7345d14040d72185d8f891eac4dd0238486df GIT binary patch literal 1053 zcmZ8gOKTKC5bno3b~l@7qG%8ijS`rHi)RTzNWh#VnA@_lOs0F2(Rn1*J(`3Gh>4Gj z2SG1h+!X{p>BXb}!E;|F(LH(Bi`A0^qdinjb$503_f=KrqoWOiNstB*M$-|Xc0 zsN>`YidsM=h@c5cX`803&8VHTgr`p1scfFOsn_<<9u=N+gfD$jL#a!zR}&2}vg@{M zqPawZu^~ny0W+SGiHx*ydPNom)c8wMsW{KjY%GQ=^0rh(qK6c{hZd+|V%apK0zhWE zyM`X7Zgp41The$SbpcuA*yx9&hJPPr4n;jeRgyl@RI@%GkR950O4@e^WIzYB?+wV> zxS-ok$pyW~;X;YlStL10N`8)H6!% 2cP%fy!-L-?cUQb`>#HMWeXmv$XZ8( zq2Zz|p{Qw8D@f(eiEXM8jvzY>MiCYrkc?|q(jEGOtuwp~liCfHh$9_v YDq59k zs5+SaI19Dxt``zETWg!9F_XkfM|rw7d&*+9z^BR9)PJ5cNgjoXnr;1c4_xCP*48*x zMO~fiFfp#Ju`)i$C DGq92+s3%nQLt|SZ1=$#RPB)pQ`LMGB-^11 zY(=Z=9jFPMnz4T=+cs1-#1(#?Pw_F%7^6p@_Zu$b)~$e5r3dRA)J;RJCt+f9y?Ko4 z*x%Jw4k_4%w+yS2v<`2@XH>B &E1X&gW!fq~$AcB~K|AObb>Li)d-aYwVPi8hIYc=)yb-jA^e(%-qbv8Zi z5*SyX{CTr$5b_s(oE{c@EW?zWAQ)jZCJFUuqIp`PdpgB6EjAL b {Xs} z5rs`nRo)9E|0rWTR`qtoW9DxKam0c=6CpaE9y)w1!<5%RaNMJT zdRD0$O9 Q&$WtO(*0%X23s;eH@x)JYQnwoe3xE5$!=Uwfyua{G2`HOfCIZmf&!77ugT zx)EocHzgNaQOH{|yvdV5wjhm@d>6VsWsRU UE z#!}I(r>Te;a8~s=N}}AyLwpG(pN2(=gmpBB8gzU9Tt&|~tTkOxh5Z6OMGZv-gwmrl zS9RYH(lpD jLJSCz9>m=VD&}W5oQh*i 8AgXYf&IG1+wqd?Uj7G zFlnHP@5``FVva~De1KM0)+d!(IPak>!Sh0-A(mr2P@i-La%P9zf*;Z)eA8J17oZh& zSU!Hdcl7v&!RPmm9v%$u-YYY10s|0_KrBtF49Vm6S?E^QZcCoO0b3*nYUtZDr(lk( zYt5N6bXT_Tvn&L1zXVR=G72nk8B5Hgb``}dDDYhIB8rm#uYv}@JCSv{$a~^-G(4*v zu7KepOo=6Ti2>~}dK%QyT&mf#RNx+HMrGx_Zj^RLq2MBkz}A2$Jr<;S6bcj9%JA4_ eBQ)sztjNk)8vQBX#qyW8I7=E@Lw9PI^?w1fa-=l? literal 0 HcmV?d00001 diff --git a/schemas/blog.py b/schemas/blog.py index 477e705..eef6bcd 100644 --- a/schemas/blog.py +++ b/schemas/blog.py @@ -1,6 +1,6 @@ from typing import Optional -from pydantic import BaseModel +from pydantic import BaseModel, Field from datetime import datetime @@ -13,14 +13,25 @@ class BlogQuery(BaseModel): year: Optional[int] = None -class BlogResponse(BaseModel): - id: Optional[int] = None - title: Optional[str] = None - topValue: Optional[int] = None - isGreat: Optional[bool] = None - category: Optional[str] = None - summary: Optional[str] = None +class BlogBase(BaseModel): + title: str + topValue: int + isGreat: bool + category: str content: Optional[str] = None + + +class BlogCreate(BlogBase): + pass + + +class BlogUpdate(BlogBase): + pass + + +class BlogResponse(BlogBase): + id: Optional[int] = None + summary: Optional[str] = None wordCount: Optional[int] = None readDuration: Optional[float] = None visitCount: Optional[int] = None @@ -49,6 +60,21 @@ class BlogStatsResponse(BaseModel): wordCount: int +class BlogVisitResponse(BaseModel): + ip: str + os: str + browser: str + uri: str + title: Optional[str] = None + visitTime: datetime + + class Config: + from_attributes = True + json_encoders = { + datetime: lambda dt: dt.strftime('%Y-%m-%d %H:%M:%S') + } + + class BlogLatestResponse(BaseModel): id: int title: str diff --git a/service/__pycache__/blog_service.cpython-310.pyc b/service/__pycache__/blog_service.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..07388defdbc952c3f252aae652f64f087c68520c GIT binary patch literal 8775 zcmb7J+m9SqTJO4a^}VO()^qV~lGsk#i5 5)c*zZI<8fJJmhi bS=evJjbqa-S0)Nw|{{F_LN+R)39E|^Qb`@99H4_Op;Tr9PZ&VF~xY;&+ zt7-{uwQWCHP5MsN@l(~5pRT5bZnrajwwe_@+0Oa-YThqY3x2U$^rxy*eyLiLIj24C z&s1mp+3Ku6SDo|ctMh)jTJ{&J3;tqt(O;@A`ODR1|4{XitWUKM`$wur1W&h*`p2rr z1kbcr{3ohU2%c>}=|5F{%0FH`?w_ch0BzMRcv-jToph&gmAoU~%u-?_?M}Nh50cfV zWp>t^#f%{{jyvbhKd`IM$V^%8nb~mM1$PnDicpulWvo91>au$X)Mtfy*n1Atlb{}P zkAiwysK-Xs7552H&y4n6@(#%^Y4=I@Da<^-XP4vd2~f`p^(5ZoY1!!%-u)T3f|(aa zJLz{h Wf0<8Ru|%+dbnx59&)Xbsm(n?hBy2JX%+lb?4j{L48H2 zFL_0*d)a*jlvnrR>yq&GRrfXU^) oW6(XSo-=h4}n$x^H3T zy!)lAiOR)KsEZXNvfph6A%0U=yjwjFs2w?h*Y+A=WN-Ag8j *OUzq^zvd_Xz&; zT^IM`z}c_XH$ANDwaKMox4zlj!b}a!Qg=bgU+i{&>Q2M!hUAJBl{USwwvLyp1wG%d z<4i?TZg-ShYjk?x#Wcrwlv{Iqs?OU!F(8Xi=nx{)U61mOo>E{`4G#l%2x~#}o) rq0usNS-9*$(lvGrU=A=7SgMr ?gX@73EqFG@9ocPNr5-2lh6evyxt zgpGN!@N&$-DEk4GPS0c;BFJk^-;1(65hU@-k|MKI1|Tw | z@uN(q7kaAIX>Q?;_^dU&VM-JUNP1IsdfnRk-6#zPcnX+uc$g)ChqhWF{sh6308vu3 z^I<}*V)WVh%jd6Ox^w6HJI(ORz4foEP7Br@T<6}W15bU>Y }E*$gM^#;BN$q|VnGG6VsWtKa_{1f ziB${n4wmZo&B1bbsBe8Iv18mfF*+O`!MZ6J3df1T(LRmx*iPcU?dIJ4gGArHoY*#C zHib2H9E?*Z2u=b-sfPBv>S>amAvi_wEWl^RiO9a|)m4LjXZS}cko#A0{bw0qGtp0c zJ$2s*69c1 WnR@PRWTKX6s4)XwT|*1nvr?tEFBabrKp_-7r88Zp^YHZ==j~Y zewMrQQRT$FXD4+FZ|pYd4$oX@cN+C}@D`BaeU+76<5kb$es!AQ48ijRX9;Mo>IH&x z1bKqX1TPZ2L_oz=uM)gQ@H)YHfG8Vt40fkk=+wJiZ_ADBcJrpEewqu#zEj?vP}LD1 zlecep%2O%Myh%Wdj4 !@&hGQPawQSgC(I}Zk{HtHUCh84<2@9l;Ea8%X@&h2yJP9cS zD-I<#FoqJNl?0|ki35yw$M9msc9#K0yQ5WFvEAi?!R~Nx0aylDaWEB@B-~hTR%WI# zlM`$PSRNLXAIyrC&WV-M`gFLN6Dutbt#mLK!kQ6&N@7>$V3DJ~K^qf`T7vCZeakH@ zA _p&KdBrM(M$Bv4-mE8)#9I2fvJP)WdcT+1NB+0ahB4JoQ-B1;U!9L zG*u9)Wlqq1)t3P(aq!?ut(-Pp^ImN%O=@G)y@K@t4QChuwDM^f$ASM!7slfN@w{pN zTY5fkq>ZepuJf5+19(gUX~?30>p(&}SYsO^4CylIhHYHQ&_V8Cv{Kt C7Q0gt`3>QV6Ht%X_p>*=R>^v2tZ_EE^^=_edNyY2^(+=H-^F?kHm*X zDR*6V-YcK _|qbO=)1mj1Zv2gpP*@4&bsOTuzR-> !E$;-?X`c2 zn7HmLu^Peq1a$U84=SOp6tkc 4M)C= z8*vZ@rO5HN8Xe|w7>pg$(t(02qp8s`V_jM0S^;vDZ(#Tlt{@FSgTpaQMe0O-z?d|8 z_dmtpK#9UJ2D2gR1v*5?%W+ND!s+ZV#T*?8kJ-v>qbbq1U3&?XS{7JRupBT)uzXm+ zYO__`Hn9S(UG6gOC&OutZ5W`>^r0!W*>J9(gsob&dAwCQw#$VvyG*UAU&K3KL!njh z?ljsx*Q@nVGlqLiuCh4hT}73sHcC`!8CaC{!R|IPb-x?U#(B7;pu;>#+$9;m#|=bt z6RYFoTr5ZO2JH&Oj(6PzEn24=?-Q#7R2(haH%JhBrfaJXYXVf8b)BWGa)AJfc~ms; zWq%KZU 5%J{Sc_?_$|YDG0nyx>7=90zXfBKpuMEv4HJTci2`ixdIAKDusnjFI zW+XfCM0*r_0L9*+(m|~U=~(G9vC>&ET6^u&dF-bH_@i%q^U=qDH45X(!_2ixR`Vf` zf!asi)CMO+o8BiT3J?d{EfVOZ)h5B}2ncUl82$~efB||a=2)nlJ6Nb+$N~s;*R~~Y z!XIy&5(i<|vFFN=8F4&}?Jhp3M7ezq8qLD0JhVf`#Uw#9a`cRNx1mai@>B2k96QR5 zZS!|~kDoQu)al?0kADHP2Wr5?@v+Jo9XU0A jrezk&ZN4a?Es* z qL7^GRKK0vl!!(ui{eg5Uc{A!YdJ{R;jNLtd4*v>bn^J zD@i{CaPR4{^l%uK_bua!x{PCfr=vX|t !hxa(O zIs$yXXm+0$`bSIzj0UWn(2n>#ZRzyXW^3Yqiy72JJxouq#{eOXO9aCT60sizaR_D) z5a|U+;WNUM11E%S?N9`8F361NQjqglQHDmMTU3Q1lVm7GdL^T#vHe&alO$g_MJ7cS z8c;e3bOMyeb%mT_g?FrufE;~1RS(!S{ddd<+{ZNX_@6VJAE|p7PMmWh$9WsGyNwqp zoh{`TGH$3@iVcZDn(8R(hKw8I?7r&u3EzC;IR~oS3|4-zy8W0dMBPq|Nw 5!9^a7$}yNSGeSHD!qsnrn>#!f%>)E{C&Py*1kxcT{_W&Ws`gdW`o zF>Z26XL7=ClLzFt=+p`jXc0nf?1hauB%#(J#f4=mAB*5bchki>38t3+F9YBEuEk+J zP?N{Q( `HS9o2j=5R!875tB_Z~SF}XHI!?=OSSp#HrBiXC`om&QeG>~NWXF`F zfJ+$lt3Y<`WMGpqWEC*@2Vi0^WCtj^QIY`$e*qeucMc=nq|5_@o8Qi&`%bp9kB&+= zZe1h>Q_}n^v4P>H+%%lJ6+3nG%pH1`ub@rbt@FbHuuQXi(REQn22rL5eqP)Jy_#(X z_*|hnA9${`1Aj8hoWm)<*fLLom)bH !m$dLl(2M_uBfj-;| z9H(x3>*(#Hm*4Expw@DzEDu$~myxYd@~kL_o;@0N`fQ>tV&_-*fKk{O*3 ZwfK!7Kb<;(=99 mXOnP2D z`tN`FjlcN*pFjBi$A3M_m+y(7PHRCO#S)}f!u{U_t}}q&A||==w~2j7@Ew3_mASEC zxSM=_iwj1To%(eSMUP}(s*D -8=U}sl^gh6 pnmPthc_VVdyWQs2reXw%QX6%|_ij^J9A$%B?RvX$!}ITIzsk_7 zLtKjU#ohTc=-4YJHPxJy#lac+5AAIw-=Is@-E%TF$_L!G9xr2MqNWH+1d_B+_-d9w zoCV7#RVG*fh-QZO$6rs;<5!EAsFwFk#Gh5=t5!7cH(j^w-3I^9p!U~aSOaNaR!hCG z+1Bq<6I31I)1)nTgpahEa12aibeH=&Y4&=j)0V~;a;Z@1X3sacrcH2@phXZ6+#+B) zD7lgZbP1ah62#0EB{Zf4s~lbgh|(9p*IwIu3kr}3=!o)(yt# #%tib-PZ(R;=aa i@-yWl<@s`9IbB{_&Xf!I&&^Dg(=)jhXL;)A%>My`)yOgc literal 0 HcmV?d00001 diff --git a/service/blog_service.py b/service/blog_service.py index c974d1b..14cba26 100644 --- a/service/blog_service.py +++ b/service/blog_service.py @@ -6,10 +6,11 @@ from sqlalchemy.orm import Session from models.blog import Blog, BlogCategory, BlogVisit, BlogContent, BlogComment from schemas.blog import BlogResponse, BlogQuery, BlogCategoryResponse, BlogStatsResponse, \ - BlogLatestResponse, BlogCommentCreate, BlogCommentResponse + BlogLatestResponse, BlogCommentCreate, BlogCommentResponse, BlogVisitResponse, BlogCreate, BlogUpdate from schemas.pagination import PageResult from schemas.paginate_query import paginate_query from middleware.exceptions import AppException +from utils.blog_utils import get_blog_summary, get_word_count, get_read_duration def query_blog_by_page(db: Session, current_page: int = 1, page_size: int = 10) -> PageResult[BlogResponse]: @@ -107,6 +108,119 @@ def query_blog_by_id(db: Session, blog_id: int) -> BlogResponse: return BlogResponse.from_orm(blog) +def add_blog(db: Session, blog: BlogCreate) -> bool: + word_count = get_word_count(blog.content) + + db_blog = Blog( + title=blog.title, + top_value=blog.topValue, + is_great=blog.isGreat, + category_id=add_blog_category(db, blog.category), + content_id=add_blog_content(db, blog.content), + summary=get_blog_summary(blog.content), + word_count=word_count, + read_duration=get_read_duration(word_count) + ) + + db.add(db_blog) + db.commit() + db.refresh(db_blog) + + return True + + +def add_blog_category(db: Session, category: str) -> int: + db_blog_category = db.query(BlogCategory).filter(BlogCategory.name == category).first() + if db_blog_category is None: + db_new_blog_category = BlogCategory(name=category) + db.add(db_new_blog_category) + db.commit() + category_id = db_new_blog_category.id + else: + category_id = db_blog_category.id + + return category_id + + +def add_blog_content(db: Session, content: str) -> int: + db_blog_content = BlogContent(content=content.encode('utf-8')) + db.add(db_blog_content) + db.commit() + + return db_blog_content.id + + +def update_blog(db: Session, blog_id: int, blog: BlogUpdate) -> bool: + db_blog = db.query(Blog).filter(Blog.id == blog_id).first() + if not db_blog: + raise AppException("博客不存在") + + update_data = blog.model_dump(exclude_unset=True) + + update_blog_content(db, db_blog.content_id, blog.content) + + db_blog.title = update_data["title"] + db_blog.top_value = update_data["topValue"] + db_blog.is_great = update_data["isGreat"] + db_blog.category_id = update_blog_category(db, blog.category) + + word_count = get_word_count(blog.content) + db_blog.summary = get_blog_summary(blog.content), + db_blog.word_count = word_count + db_blog.read_duration = get_read_duration(word_count) + + db.commit() + db.refresh(db_blog) + + return True + + +def update_blog_category(db: Session, category: str) -> int: + db_blog_category = db.query(BlogCategory).filter(BlogCategory.name == category).first() + + if db_blog_category is None: + return add_blog_category(db, category) + else: + return db_blog_category.id + + +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() + if not db_blog_content: + raise AppException("博客内容不存在") + + db_blog_content.content = blog_content.encode('utf-8') + + db.commit() + db.refresh(db_blog_content) + + return True + + +def delete_blog(db: Session, blog_id: int) -> bool: + db_blog = db.query(Blog).filter(Blog.id == blog_id).first() + if not db_blog: + raise AppException("博客不存在") + + delete_blog_content(db, db_blog.content_id) + + db.delete(db_blog) + db.commit() + + return True + + +def delete_blog_content(db: Session, blog_content_id: int) -> bool: + db_blog_content = db.query(BlogContent).filter(BlogContent.id == blog_content_id).first() + if not db_blog_content: + raise AppException("博客内容不存在") + + db.delete(db_blog_content) + db.commit() + + return True + + def query_blog_category(db: Session) -> List[BlogCategoryResponse]: query = select( BlogCategory.name, @@ -147,6 +261,21 @@ def add_blog_visit(db: Session, blog_visit: BlogVisit): db.refresh(blog_visit) +def query_blog_visit(db: Session, current_page: int = 1, page_size: int = 10) -> PageResult[BlogVisitResponse]: + query = select( + BlogVisit.ip, + BlogVisit.os, + BlogVisit.browser, + BlogVisit.uri, + Blog.title, + BlogVisit.create_time.label("visitTime") + ).select_from(BlogVisit).outerjoin( + Blog, Blog.id == BlogVisit.blog_id + ).order_by(desc(BlogVisit.create_time)) + + return paginate_query(db, query, current_page, page_size) + + def query_blog_comment(db: Session, blog_id: int) -> List[BlogCommentResponse]: query = select( BlogComment.id, diff --git a/sys.stdout b/sys.stdout index bc5fe0b..abc25c4 100644 --- a/sys.stdout +++ b/sys.stdout @@ -201,3 +201,512 @@ [32m2025-09-21 10:14:26.611[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/comment/685968269635653[0m [32m2025-09-21 10:14:32.814[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m [32m2025-09-21 10:14:32.814[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 15:10:32.528[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/category[0m +[32m2025-09-22 15:10:32.538[0m | [41m[1mCRITICAL[0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m38[0m - [41m[1m数据库异常: (pymysql.err.OperationalError) (1045, "Access denied for user 'root'@'localhost' (using password: YES)") +(Background on this error at: https://sqlalche.me/e/20/e3q8)[0m +[32m2025-09-22 15:11:20.975[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/category[0m +[32m2025-09-22 15:11:20.979[0m | [41m[1mCRITICAL[0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m38[0m - [41m[1m数据库异常: (pymysql.err.OperationalError) (1045, "Access denied for user 'root'@'localhost' (using password: YES)") +(Background on this error at: https://sqlalche.me/e/20/e3q8)[0m +[32m2025-09-22 15:12:52.569[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/category[0m +[32m2025-09-22 15:12:52.572[0m | [41m[1mCRITICAL[0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m38[0m - [41m[1m数据库异常: (pymysql.err.OperationalError) (1045, "Access denied for user 'root'@'localhost' (using password: YES)") +(Background on this error at: https://sqlalche.me/e/20/e3q8)[0m +[32m2025-09-22 15:14:34.715[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 15:14:34.715[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 15:14:34.722[0m | [41m[1mCRITICAL[0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m38[0m - [41m[1m数据库异常: (pymysql.err.OperationalError) (1045, "Access denied for user 'root'@'localhost' (using password: YES)") +(Background on this error at: https://sqlalche.me/e/20/e3q8)[0m +[32m2025-09-22 15:14:36.797[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/category[0m +[32m2025-09-22 15:14:36.802[0m | [41m[1mCRITICAL[0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m38[0m - [41m[1m数据库异常: (pymysql.err.OperationalError) (1045, "Access denied for user 'root'@'localhost' (using password: YES)") +(Background on this error at: https://sqlalche.me/e/20/e3q8)[0m +[32m2025-09-22 15:14:37.098[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 15:14:37.098[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 15:14:37.103[0m | [41m[1mCRITICAL[0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m38[0m - [41m[1m数据库异常: (pymysql.err.OperationalError) (1045, "Access denied for user 'root'@'localhost' (using password: YES)") +(Background on this error at: https://sqlalche.me/e/20/e3q8)[0m +[32m2025-09-22 15:15:18.304[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/category[0m +[32m2025-09-22 15:15:18.835[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 15:15:18.836[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 15:16:30.165[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 15:16:30.166[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 15:16:30.291[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 15:16:30.292[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 15:16:45.745[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 15:16:45.745[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 15:17:55.127[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 15:17:55.127[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 15:17:59.863[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 15:17:59.863[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 15:18:01.178[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 15:18:01.178[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 15:18:09.547[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 15:18:09.548[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 15:18:10.775[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 15:18:10.775[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 15:18:11.597[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/category[0m +[32m2025-09-22 15:18:13.368[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 15:18:13.368[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 15:18:14.576[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/content/631305371107398[0m +[32m2025-09-22 15:18:14.606[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/comment/0[0m +[32m2025-09-22 15:18:21.277[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/content/631305371107398[0m +[32m2025-09-22 15:18:21.286[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/comment/0[0m +[32m2025-09-22 15:18:32.435[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/content/631305371107398[0m +[32m2025-09-22 15:18:32.477[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/comment/0[0m +[32m2025-09-22 15:18:34.315[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 15:18:34.315[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 15:18:35.850[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/content/631305371107398[0m +[32m2025-09-22 15:18:35.861[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/comment/0[0m +[32m2025-09-22 15:18:36.801[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 15:18:36.801[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 15:18:37.910[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/content/631305371107398[0m +[32m2025-09-22 15:18:37.922[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/comment/0[0m +[32m2025-09-22 15:18:54.032[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 15:18:54.032[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 15:18:55.791[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/content/631305371107398[0m +[32m2025-09-22 15:18:55.823[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/comment/0[0m +[32m2025-09-22 15:19:07.698[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/content/631305371107398[0m +[32m2025-09-22 15:19:07.711[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/comment/0[0m +[32m2025-09-22 15:19:09.027[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 15:19:09.027[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 15:19:10.200[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/category[0m +[32m2025-09-22 15:19:49.933[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 15:19:49.933[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 15:19:51.055[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 15:19:51.055[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 15:29:07.461[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/visit?currentPage=1&pageSize=15[0m +[32m2025-09-22 15:29:07.461[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '15'}[0m +[32m2025-09-22 15:29:07.462[0m | [33m[1mWARNING [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m26[0m - [33m[1m响应: 404[0m +[32m2025-09-22 15:29:09.248[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/visit?currentPage=1&pageSize=15[0m +[32m2025-09-22 15:29:09.248[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '15'}[0m +[32m2025-09-22 15:29:09.249[0m | [33m[1mWARNING [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m26[0m - [33m[1m响应: 404[0m +[32m2025-09-22 15:29:11.191[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/category[0m +[32m2025-09-22 15:29:11.747[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/visit?currentPage=1&pageSize=15[0m +[32m2025-09-22 15:29:11.747[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '15'}[0m +[32m2025-09-22 15:29:11.748[0m | [33m[1mWARNING [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m26[0m - [33m[1m响应: 404[0m +[32m2025-09-22 15:29:44.643[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/category[0m +[32m2025-09-22 15:29:45.150[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/visit?currentPage=1&pageSize=15[0m +[32m2025-09-22 15:29:45.150[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '15'}[0m +[32m2025-09-22 15:29:45.151[0m | [33m[1mWARNING [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m26[0m - [33m[1m响应: 404[0m +[32m2025-09-22 15:30:49.103[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/category[0m +[32m2025-09-22 15:30:49.752[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/visit?currentPage=1&pageSize=15[0m +[32m2025-09-22 15:30:49.753[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '15'}[0m +[32m2025-09-22 15:30:49.754[0m | [33m[1mWARNING [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m26[0m - [33m[1m响应: 404[0m +[32m2025-09-22 15:30:54.846[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/[0m +[32m2025-09-22 15:30:54.847[0m | [33m[1mWARNING [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m26[0m - [33m[1m响应: 404[0m +[32m2025-09-22 15:30:54.955[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/favicon.ico[0m +[32m2025-09-22 15:30:54.955[0m | [33m[1mWARNING [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m26[0m - [33m[1m响应: 404[0m +[32m2025-09-22 15:31:28.200[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/docs[0m +[32m2025-09-22 15:31:38.462[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/docs[0m +[32m2025-09-22 15:31:50.381[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/docs[0m +[32m2025-09-22 15:32:30.627[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/docs[0m +[32m2025-09-22 15:32:58.230[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/docs[0m +[32m2025-09-22 15:33:01.985[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/.well-known/appspecific/com.chrome.devtools.json[0m +[32m2025-09-22 15:33:01.986[0m | [33m[1mWARNING [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m26[0m - [33m[1m响应: 404[0m +[32m2025-09-22 15:33:06.065[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/docs[0m +[32m2025-09-22 15:33:06.087[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/.well-known/appspecific/com.chrome.devtools.json[0m +[32m2025-09-22 15:33:06.088[0m | [33m[1mWARNING [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m26[0m - [33m[1m响应: 404[0m +[32m2025-09-22 15:33:30.973[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/docs[0m +[32m2025-09-22 15:33:31.004[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/.well-known/appspecific/com.chrome.devtools.json[0m +[32m2025-09-22 15:33:31.005[0m | [33m[1mWARNING [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m26[0m - [33m[1m响应: 404[0m +[32m2025-09-22 15:33:31.649[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/openapi.json[0m +[32m2025-09-22 15:33:40.922[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/visit?currentPage=1&pageSize=10[0m +[32m2025-09-22 15:33:40.922[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 15:36:26.310[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/visit?currentPage=1&pageSize=10[0m +[32m2025-09-22 15:36:26.310[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 15:39:34.526[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/visit?currentPage=1&pageSize=10[0m +[32m2025-09-22 15:39:34.526[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 15:42:07.925[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/visit?currentPage=1&pageSize=10[0m +[32m2025-09-22 15:42:07.926[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 15:45:58.186[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/visit?currentPage=1&pageSize=10[0m +[32m2025-09-22 15:45:58.187[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 15:46:55.130[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/visit?currentPage=1&pageSize=10[0m +[32m2025-09-22 15:46:55.131[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 15:47:55.921[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/visit?currentPage=1&pageSize=10[0m +[32m2025-09-22 15:47:55.922[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 15:49:55.638[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/visit?currentPage=1&pageSize=10[0m +[32m2025-09-22 15:49:55.638[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 15:50:42.343[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/visit?currentPage=1&pageSize=10[0m +[32m2025-09-22 15:50:42.343[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 15:54:01.182[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/visit?currentPage=1&pageSize=10[0m +[32m2025-09-22 15:54:01.182[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 15:54:34.738[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/category[0m +[32m2025-09-22 15:54:35.231[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/visit?currentPage=1&pageSize=15[0m +[32m2025-09-22 15:54:35.231[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '15'}[0m +[32m2025-09-22 15:54:35.232[0m | [33m[1mWARNING [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m26[0m - [33m[1m响应: 404[0m +[32m2025-09-22 15:54:45.865[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/visit?currentPage=1&pageSize=15[0m +[32m2025-09-22 15:54:45.866[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '15'}[0m +[32m2025-09-22 15:54:45.866[0m | [33m[1mWARNING [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m26[0m - [33m[1m响应: 404[0m +[32m2025-09-22 15:55:11.021[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/visit?currentPage=1&pageSize=15[0m +[32m2025-09-22 15:55:11.021[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '15'}[0m +[32m2025-09-22 15:55:13.232[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/visit?currentPage=1&pageSize=15[0m +[32m2025-09-22 15:55:13.232[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '15'}[0m +[32m2025-09-22 15:55:16.814[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/visit?currentPage=2&pageSize=15[0m +[32m2025-09-22 15:55:16.814[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '2', 'pageSize': '15'}[0m +[32m2025-09-22 15:55:18.058[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/visit?currentPage=3&pageSize=15[0m +[32m2025-09-22 15:55:18.058[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '3', 'pageSize': '15'}[0m +[32m2025-09-22 15:55:19.444[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/visit?currentPage=4&pageSize=15[0m +[32m2025-09-22 15:55:19.444[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '4', 'pageSize': '15'}[0m +[32m2025-09-22 15:55:21.420[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/visit?currentPage=1&pageSize=15[0m +[32m2025-09-22 15:55:21.420[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '15'}[0m +[32m2025-09-22 15:56:21.793[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 15:56:21.794[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 15:56:22.607[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/category[0m +[32m2025-09-22 15:56:23.300[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/visit?currentPage=1&pageSize=15[0m +[32m2025-09-22 15:56:23.301[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '15'}[0m +[32m2025-09-22 15:56:29.178[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 15:56:29.179[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 15:56:34.330[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/content/631305371107398[0m +[32m2025-09-22 15:56:34.384[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/comment/0[0m +[32m2025-09-22 15:56:37.117[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 15:56:37.117[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 15:56:46.624[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=2&pageSize=10[0m +[32m2025-09-22 15:56:46.624[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '2', 'pageSize': '10'}[0m +[32m2025-09-22 15:56:48.277[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/content/591259203186757[0m +[32m2025-09-22 15:56:48.288[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/comment/0[0m +[32m2025-09-22 15:57:02.098[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=2&pageSize=10[0m +[32m2025-09-22 15:57:02.098[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '2', 'pageSize': '10'}[0m +[32m2025-09-22 15:57:05.160[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/content/591259203186757[0m +[32m2025-09-22 15:57:05.187[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/comment/0[0m +[32m2025-09-22 16:01:30.053[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=2&pageSize=10[0m +[32m2025-09-22 16:01:30.053[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '2', 'pageSize': '10'}[0m +[32m2025-09-22 16:11:59.331[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/content/653526425653317[0m +[32m2025-09-22 16:11:59.344[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/comment/0[0m +[32m2025-09-22 16:12:16.814[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/content/653526425653317[0m +[32m2025-09-22 16:12:16.851[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/comment/0[0m +[32m2025-09-22 16:12:18.578[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 16:12:18.578[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 16:12:19.373[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/category[0m +[32m2025-09-22 16:12:20.288[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 16:12:20.288[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 16:12:22.093[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/content/631305371107398[0m +[32m2025-09-22 16:12:22.103[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/comment/0[0m +[32m2025-09-22 16:13:08.148[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/content/631305371107398[0m +[32m2025-09-22 16:13:08.164[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/comment/0[0m +[32m2025-09-22 16:13:43.129[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/content/631305371107398[0m +[32m2025-09-22 16:13:43.183[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/comment/0[0m +[32m2025-09-22 16:13:47.295[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: PUT http://127.0.0.1:8082/blog/631305371107398[0m +[32m2025-09-22 16:13:47.301[0m | [41m[1mCRITICAL[0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m44[0m - [41m[1m未知异常: 'str' object has no attribute '_sa_instance_state'[0m +[32m2025-09-22 16:15:09.734[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: PUT http://127.0.0.1:8082/blog/631305371107398[0m +[32m2025-09-22 16:15:09.762[0m | [41m[1mCRITICAL[0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m44[0m - [41m[1m未知异常: 'str' object has no attribute '_sa_instance_state'[0m +[32m2025-09-22 16:15:33.888[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: PUT http://127.0.0.1:8082/blog/631305371107398[0m +[32m2025-09-22 16:15:50.282[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: PUT http://127.0.0.1:8082/blog/631305371107398[0m +[32m2025-09-22 16:15:50.311[0m | [41m[1mCRITICAL[0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m44[0m - [41m[1m未知异常: 'str' object has no attribute '_sa_instance_state'[0m +[32m2025-09-22 16:17:18.946[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: PUT http://127.0.0.1:8082/blog/631305371107398[0m +[32m2025-09-22 16:17:18.987[0m | [41m[1mCRITICAL[0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m44[0m - [41m[1m未知异常: 'str' object has no attribute '_sa_instance_state'[0m +[32m2025-09-22 16:17:50.938[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: PUT http://127.0.0.1:8082/blog/631305371107398[0m +[32m2025-09-22 16:17:50.974[0m | [41m[1mCRITICAL[0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m44[0m - [41m[1m未知异常: 'str' object has no attribute '_sa_instance_state'[0m +[32m2025-09-22 16:18:07.683[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: PUT http://127.0.0.1:8082/blog/631305371107398[0m +[32m2025-09-22 16:18:07.709[0m | [41m[1mCRITICAL[0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m44[0m - [41m[1m未知异常: 'str' object has no attribute '_sa_instance_state'[0m +[32m2025-09-22 16:19:03.894[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: PUT http://127.0.0.1:8082/blog/631305371107398[0m +[32m2025-09-22 16:19:03.922[0m | [41m[1mCRITICAL[0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m44[0m - [41m[1m未知异常: 'str' object has no attribute '_sa_instance_state'[0m +[32m2025-09-22 16:19:30.947[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: PUT http://127.0.0.1:8082/blog/631305371107398[0m +[32m2025-09-22 16:19:30.974[0m | [41m[1mCRITICAL[0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m44[0m - [41m[1m未知异常: 'str' object has no attribute '_sa_instance_state'[0m +[32m2025-09-22 16:25:21.951[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: PUT http://127.0.0.1:8082/blog/631305371107398[0m +[32m2025-09-22 16:25:21.983[0m | [41m[1mCRITICAL[0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m44[0m - [41m[1m未知异常: 'str' object has no attribute '_sa_instance_state'[0m +[32m2025-09-22 16:25:24.186[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 16:25:24.186[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 16:25:25.748[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/content/631305371107398[0m +[32m2025-09-22 16:25:25.759[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/comment/0[0m +[32m2025-09-22 16:25:27.213[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: PUT http://127.0.0.1:8082/blog/631305371107398[0m +[32m2025-09-22 16:25:27.218[0m | [41m[1mCRITICAL[0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m44[0m - [41m[1m未知异常: 'str' object has no attribute '_sa_instance_state'[0m +[32m2025-09-22 16:28:50.934[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: PUT http://127.0.0.1:8082/blog/631305371107398[0m +[32m2025-09-22 16:28:50.990[0m | [41m[1mCRITICAL[0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m44[0m - [41m[1m未知异常: 'str' object has no attribute '_sa_instance_state'[0m +[32m2025-09-22 16:31:15.089[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: PUT http://127.0.0.1:8082/blog/631305371107398[0m +[32m2025-09-22 16:31:15.117[0m | [41m[1mCRITICAL[0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m44[0m - [41m[1m未知异常: 'str' object has no attribute '_sa_instance_state'[0m +[32m2025-09-22 16:31:22.466[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/content/631305371107398[0m +[32m2025-09-22 16:31:22.509[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/comment/0[0m +[32m2025-09-22 16:31:23.823[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: PUT http://127.0.0.1:8082/blog/631305371107398[0m +[32m2025-09-22 16:31:23.827[0m | [41m[1mCRITICAL[0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m44[0m - [41m[1m未知异常: 'str' object has no attribute '_sa_instance_state'[0m +[32m2025-09-22 16:31:51.087[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: PUT http://127.0.0.1:8082/blog/631305371107398[0m +[32m2025-09-22 16:31:51.119[0m | [41m[1mCRITICAL[0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m44[0m - [41m[1m未知异常: 'str' object has no attribute '_sa_instance_state'[0m +[32m2025-09-22 16:32:28.998[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: PUT http://127.0.0.1:8082/blog/631305371107398[0m +[32m2025-09-22 16:34:34.904[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: PUT http://127.0.0.1:8082/blog/631305371107398[0m +[32m2025-09-22 16:34:34.933[0m | [41m[1mCRITICAL[0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m44[0m - [41m[1m未知异常: 'str' object has no attribute '_sa_instance_state'[0m +[32m2025-09-22 16:35:07.569[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: PUT http://127.0.0.1:8082/blog/631305371107398[0m +[32m2025-09-22 16:36:08.384[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/category[0m +[32m2025-09-22 16:38:52.539[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/category[0m +[32m2025-09-22 16:38:54.167[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 16:38:54.168[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 16:38:55.866[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/content/631305371107398[0m +[32m2025-09-22 16:38:55.952[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/comment/0[0m +[32m2025-09-22 16:38:57.139[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: PUT http://127.0.0.1:8082/blog/631305371107398[0m +[32m2025-09-22 16:41:18.563[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: PUT http://127.0.0.1:8082/blog/631305371107398[0m +[32m2025-09-22 16:41:38.946[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/docs[0m +[32m2025-09-22 16:41:39.149[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/openapi.json[0m +[32m2025-09-22 16:42:24.993[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: POST http://127.0.0.1:8082/blog[0m +[32m2025-09-22 16:42:24.996[0m | [41m[1mCRITICAL[0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m38[0m - [41m[1m数据库异常: Class 'schemas.blog.BlogCreate' is not mapped[0m +[32m2025-09-22 16:54:29.509[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: POST http://127.0.0.1:8082/blog[0m +[32m2025-09-22 16:54:54.299[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: POST http://127.0.0.1:8082/blog[0m +[32m2025-09-22 16:55:19.391[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: POST http://127.0.0.1:8082/blog[0m +[32m2025-09-22 16:57:29.815[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: POST http://127.0.0.1:8082/blog[0m +[32m2025-09-22 18:14:20.522[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: PUT http://127.0.0.1:8082/blog/222[0m +[32m2025-09-22 18:14:20.552[0m | [31m[1mERROR [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m32[0m - [31m[1m业务异常: 博客不存在 - 详情: None[0m +[32m2025-09-22 18:25:32.758[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: PUT http://127.0.0.1:8082/blog/222[0m +[32m2025-09-22 18:25:32.805[0m | [31m[1mERROR [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m32[0m - [31m[1m业务异常: 博客不存在 - 详情: None[0m +[32m2025-09-22 18:26:28.913[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: PUT http://127.0.0.1:8082/blog/722514116330950[0m +[32m2025-09-22 18:27:21.610[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/content/631305371107398[0m +[32m2025-09-22 18:27:21.641[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/comment/0[0m +[32m2025-09-22 18:27:23.929[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 18:27:23.929[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 18:27:27.864[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/category[0m +[32m2025-09-22 18:27:28.948[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/category[0m +[32m2025-09-22 18:27:29.722[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 18:27:29.722[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 18:28:52.114[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 18:28:52.114[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 18:31:41.995[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 18:31:41.996[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 18:31:45.766[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 18:31:45.766[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 18:31:48.191[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/category[0m +[32m2025-09-22 18:31:49.043[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 18:31:49.043[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 18:31:50.676[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=2&pageSize=10[0m +[32m2025-09-22 18:31:50.676[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '2', 'pageSize': '10'}[0m +[32m2025-09-22 18:31:55.477[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/content/722514116330950[0m +[32m2025-09-22 18:31:55.589[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/comment/0[0m +[32m2025-09-22 18:31:56.525[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=2&pageSize=10[0m +[32m2025-09-22 18:31:56.526[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '2', 'pageSize': '10'}[0m +[32m2025-09-22 18:31:57.563[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/content/722514116330950[0m +[32m2025-09-22 18:31:57.578[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/comment/0[0m +[32m2025-09-22 18:32:01.569[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: PUT http://127.0.0.1:8082/blog/722514116330950[0m +[32m2025-09-22 18:32:25.403[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/content/722514116330950[0m +[32m2025-09-22 18:32:25.421[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/comment/0[0m +[32m2025-09-22 18:32:27.763[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: PUT http://127.0.0.1:8082/blog/722514116330950[0m +[32m2025-09-22 18:32:30.262[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/content/722514116330950[0m +[32m2025-09-22 18:32:30.274[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/comment/0[0m +[32m2025-09-22 18:32:31.801[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: PUT http://127.0.0.1:8082/blog/722514116330950[0m +[32m2025-09-22 18:32:31.896[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 18:32:31.896[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 18:32:31.922[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/stats[0m +[32m2025-09-22 18:32:31.974[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/latest[0m +[32m2025-09-22 18:32:32.015[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 18:32:32.016[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 18:32:33.771[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=2&pageSize=10[0m +[32m2025-09-22 18:32:33.771[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '2', 'pageSize': '10'}[0m +[32m2025-09-22 18:32:35.396[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 18:32:35.396[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 18:32:41.918[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/content/722514116330950[0m +[32m2025-09-22 18:32:41.930[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/comment/0[0m +[32m2025-09-22 18:32:43.999[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/category[0m +[32m2025-09-22 18:32:45.747[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: PUT http://127.0.0.1:8082/blog/722514116330950[0m +[32m2025-09-22 18:32:45.861[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 18:32:45.861[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 18:32:45.872[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/stats[0m +[32m2025-09-22 18:32:45.884[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/latest[0m +[32m2025-09-22 18:32:45.915[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 18:32:45.916[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 18:32:48.833[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=2&pageSize=10[0m +[32m2025-09-22 18:32:48.833[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '2', 'pageSize': '10'}[0m +[32m2025-09-22 18:32:50.031[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 18:32:50.031[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 18:32:53.942[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/content/722514116330950[0m +[32m2025-09-22 18:32:53.966[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/comment/0[0m +[32m2025-09-22 18:32:54.843[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/category[0m +[32m2025-09-22 18:33:00.928[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: PUT http://127.0.0.1:8082/blog/722514116330950[0m +[32m2025-09-22 18:33:01.118[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 18:33:01.118[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 18:33:01.129[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/stats[0m +[32m2025-09-22 18:33:01.139[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/latest[0m +[32m2025-09-22 18:33:01.180[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 18:33:01.180[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 18:33:03.100[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/category[0m +[32m2025-09-22 18:33:05.118[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 18:33:05.119[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 18:33:06.433[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/content/722514116330950[0m +[32m2025-09-22 18:33:06.442[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/comment/0[0m +[32m2025-09-22 18:33:08.330[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 18:33:08.330[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 18:33:09.233[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/content/722514116330950[0m +[32m2025-09-22 18:33:09.244[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/comment/0[0m +[32m2025-09-22 18:33:09.895[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/category[0m +[32m2025-09-22 18:33:11.488[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: PUT http://127.0.0.1:8082/blog/722514116330950[0m +[32m2025-09-22 18:33:11.597[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 18:33:11.597[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 18:33:11.609[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/stats[0m +[32m2025-09-22 18:33:11.621[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/latest[0m +[32m2025-09-22 18:33:11.651[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 18:33:11.651[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 18:33:13.466[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/category[0m +[32m2025-09-22 18:33:15.203[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 18:33:15.204[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 18:33:15.764[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/category[0m +[32m2025-09-22 18:33:43.025[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 18:33:43.025[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 18:33:45.937[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: DELETE http://127.0.0.1:8082/blog/722514116330950[0m +[32m2025-09-22 18:33:45.938[0m | [33m[1mWARNING [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m26[0m - [33m[1m响应: 405[0m +[32m2025-09-22 18:34:46.500[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/content/722514116330950[0m +[32m2025-09-22 18:34:46.511[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/comment/0[0m +[32m2025-09-22 18:34:47.017[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/category[0m +[32m2025-09-22 18:34:51.419[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: PUT http://127.0.0.1:8082/blog/722514116330950[0m +[32m2025-09-22 18:34:51.500[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 18:34:51.500[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 18:34:51.512[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/stats[0m +[32m2025-09-22 18:34:51.522[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/latest[0m +[32m2025-09-22 18:34:51.556[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 18:34:51.557[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 18:34:53.242[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/category[0m +[32m2025-09-22 18:36:53.036[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 18:36:53.036[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 18:36:54.031[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/visit?currentPage=1&pageSize=15[0m +[32m2025-09-22 18:36:54.031[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '15'}[0m +[32m2025-09-22 18:36:57.341[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 18:36:57.341[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 18:38:13.963[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/category[0m +[32m2025-09-22 18:38:17.268[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 18:38:17.268[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 18:38:19.535[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/content/722514116330950[0m +[32m2025-09-22 18:38:19.548[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/comment/0[0m +[32m2025-09-22 18:38:20.820[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/category[0m +[32m2025-09-22 18:38:23.110[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: PUT http://127.0.0.1:8082/blog/722514116330950[0m +[32m2025-09-22 18:38:23.195[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 18:38:23.195[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 18:38:23.206[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/stats[0m +[32m2025-09-22 18:38:23.221[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/latest[0m +[32m2025-09-22 18:38:23.249[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 18:38:23.250[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 18:38:24.949[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/category[0m +[32m2025-09-22 18:41:06.913[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 18:41:06.914[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 18:41:09.726[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: DELETE http://127.0.0.1:8082/blog/722514116330950[0m +[32m2025-09-22 18:41:09.731[0m | [41m[1mCRITICAL[0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m44[0m - [41m[1m未知异常: delete_blog_content() missing 1 required positional argument: 'blog_content_id'[0m +[32m2025-09-22 18:41:39.132[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/docs[0m +[32m2025-09-22 18:41:39.238[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/openapi.json[0m +[32m2025-09-22 18:41:54.768[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: DELETE http://127.0.0.1:8082/blog/722514116330950[0m +[32m2025-09-22 18:41:54.771[0m | [41m[1mCRITICAL[0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m44[0m - [41m[1m未知异常: delete_blog_content() missing 1 required positional argument: 'blog_content_id'[0m +[32m2025-09-22 18:42:14.812[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: DELETE http://127.0.0.1:8082/blog/722514116330950[0m +[32m2025-09-22 18:42:19.880[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: DELETE http://127.0.0.1:8082/blog/722514116330950[0m +[32m2025-09-22 18:42:19.885[0m | [31m[1mERROR [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m32[0m - [31m[1m业务异常: 博客内容不存在 - 详情: None[0m +[32m2025-09-22 18:42:50.275[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: DELETE http://127.0.0.1:8082/blog/722514116330950[0m +[32m2025-09-22 18:42:50.303[0m | [31m[1mERROR [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m32[0m - [31m[1m业务异常: 博客内容不存在 - 详情: None[0m +[32m2025-09-22 18:43:06.008[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: DELETE http://127.0.0.1:8082/blog/722514116330950[0m +[32m2025-09-22 18:43:06.051[0m | [31m[1mERROR [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m32[0m - [31m[1m业务异常: 博客内容不存在 - 详情: None[0m +[32m2025-09-22 18:44:09.227[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: DELETE http://127.0.0.1:8082/blog/722514116330950[0m +[32m2025-09-22 18:44:09.253[0m | [31m[1mERROR [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m32[0m - [31m[1m业务异常: 博客内容不存在 - 详情: None[0m +[32m2025-09-22 18:45:23.874[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: DELETE http://127.0.0.1:8082/blog/722514116330950[0m +[32m2025-09-22 18:45:23.925[0m | [31m[1mERROR [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m32[0m - [31m[1m业务异常: 博客内容不存在 - 详情: None[0m +[32m2025-09-22 18:45:57.101[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/content/722514116330950[0m +[32m2025-09-22 18:45:57.113[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/comment/0[0m +[32m2025-09-22 18:45:58.136[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 18:45:58.137[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 18:46:03.406[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/content/722514116330950[0m +[32m2025-09-22 18:46:03.449[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/comment/0[0m +[32m2025-09-22 18:46:04.490[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 18:46:04.490[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 18:46:20.664[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 18:46:20.664[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 18:46:22.438[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: DELETE http://127.0.0.1:8082/blog/722514116330950[0m +[32m2025-09-22 18:46:22.443[0m | [31m[1mERROR [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m32[0m - [31m[1m业务异常: 博客内容不存在 - 详情: None[0m +[32m2025-09-22 18:46:56.020[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: DELETE http://127.0.0.1:8082/blog/722514116330950[0m +[32m2025-09-22 18:47:07.468[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: DELETE http://127.0.0.1:8082/blog/722514116330950[0m +[32m2025-09-22 18:47:41.733[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: DELETE http://127.0.0.1:8082/blog/722514116330950[0m +[32m2025-09-22 18:50:54.925[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: DELETE http://127.0.0.1:8082/blog/722514116330950[0m +[32m2025-09-22 18:50:55.028[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 18:50:55.028[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 18:50:55.067[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/stats[0m +[32m2025-09-22 18:50:55.083[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/latest[0m +[32m2025-09-22 18:51:10.453[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/category[0m +[32m2025-09-22 18:51:13.077[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: POST http://127.0.0.1:8082/blog[0m +[32m2025-09-22 18:51:13.285[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 18:51:13.286[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 18:51:13.301[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/stats[0m +[32m2025-09-22 18:51:13.317[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/latest[0m +[32m2025-09-22 18:51:13.358[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 18:51:13.359[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 18:51:15.327[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=2&pageSize=10[0m +[32m2025-09-22 18:51:15.328[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '2', 'pageSize': '10'}[0m +[32m2025-09-22 18:54:54.576[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 18:54:54.576[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 18:54:56.974[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=2&pageSize=10[0m +[32m2025-09-22 18:54:56.974[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '2', 'pageSize': '10'}[0m +[32m2025-09-22 18:54:59.240[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: DELETE http://127.0.0.1:8082/blog/722542064379334[0m +[32m2025-09-22 18:54:59.455[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 18:54:59.455[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 18:54:59.466[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 18:54:59.466[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 18:54:59.494[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/stats[0m +[32m2025-09-22 18:54:59.527[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/latest[0m +[32m2025-09-22 18:55:00.853[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=2&pageSize=10[0m +[32m2025-09-22 18:55:00.853[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '2', 'pageSize': '10'}[0m +[32m2025-09-22 18:55:02.437[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 18:55:02.437[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 18:55:07.394[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/category[0m +[32m2025-09-22 18:55:08.960[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: POST http://127.0.0.1:8082/blog[0m +[32m2025-09-22 18:55:09.151[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 18:55:09.151[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 18:55:09.164[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/stats[0m +[32m2025-09-22 18:55:09.176[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/latest[0m +[32m2025-09-22 18:55:09.215[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 18:55:09.216[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 18:55:12.434[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/content/722543030515142[0m +[32m2025-09-22 18:55:12.446[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/comment/0[0m +[32m2025-09-22 18:55:13.732[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 18:55:13.732[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 18:55:15.059[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/content/722543030515142[0m +[32m2025-09-22 18:55:15.072[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/comment/0[0m +[32m2025-09-22 18:55:15.748[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/category[0m +[32m2025-09-22 18:55:21.292[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: PUT http://127.0.0.1:8082/blog/722543030515142[0m +[32m2025-09-22 18:55:21.465[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 18:55:21.466[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 18:55:21.477[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/stats[0m +[32m2025-09-22 18:55:21.488[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/latest[0m +[32m2025-09-22 18:55:21.524[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 18:55:21.524[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 18:55:23.208[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/content/722543030515142[0m +[32m2025-09-22 18:55:23.219[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/comment/0[0m +[32m2025-09-22 18:55:24.389[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 18:55:24.390[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 18:55:28.920[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: DELETE http://127.0.0.1:8082/blog/722543030515142[0m +[32m2025-09-22 18:55:29.157[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 18:55:29.157[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 18:55:29.182[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/stats[0m +[32m2025-09-22 18:55:29.192[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/latest[0m +[32m2025-09-22 18:55:30.441[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=2&pageSize=10[0m +[32m2025-09-22 18:55:30.441[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '2', 'pageSize': '10'}[0m +[32m2025-09-22 18:55:31.669[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 18:55:31.669[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 18:56:17.221[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=2&pageSize=10[0m +[32m2025-09-22 18:56:17.221[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '2', 'pageSize': '10'}[0m +[32m2025-09-22 18:56:19.131[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 18:56:19.131[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 19:04:46.072[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 19:04:46.073[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 19:05:04.232[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 19:05:04.232[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 19:06:27.903[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/category[0m +[32m2025-09-22 19:06:29.614[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/category[0m +[32m2025-09-22 19:06:30.762[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 19:06:30.763[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 19:06:31.344[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/category[0m +[32m2025-09-22 19:06:31.873[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/visit?currentPage=1&pageSize=15[0m +[32m2025-09-22 19:06:31.873[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '15'}[0m +[32m2025-09-22 19:06:33.165[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 19:06:33.165[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 19:07:01.746[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/visit?currentPage=1&pageSize=15[0m +[32m2025-09-22 19:07:01.747[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '15'}[0m +[32m2025-09-22 19:07:14.066[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/visit?currentPage=1&pageSize=15[0m +[32m2025-09-22 19:07:14.066[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '15'}[0m +[32m2025-09-22 19:07:17.578[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/visit?currentPage=1&pageSize=15[0m +[32m2025-09-22 19:07:17.578[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '15'}[0m +[32m2025-09-22 19:07:20.284[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/category[0m +[32m2025-09-22 19:07:29.679[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 19:07:29.679[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 19:07:43.055[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 19:07:43.055[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 19:07:43.499[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/category[0m +[32m2025-09-22 19:07:59.605[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 19:07:59.605[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 19:08:00.326[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/category[0m +[32m2025-09-22 19:08:01.072[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/visit?currentPage=1&pageSize=15[0m +[32m2025-09-22 19:08:01.072[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '15'}[0m +[32m2025-09-22 19:08:37.540[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/visit?currentPage=1&pageSize=15[0m +[32m2025-09-22 19:08:37.541[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '15'}[0m +[32m2025-09-22 19:08:41.634[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 19:08:41.634[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 19:08:42.352[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/category[0m +[32m2025-09-22 19:08:46.044[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/visit?currentPage=1&pageSize=15[0m +[32m2025-09-22 19:08:46.044[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '15'}[0m +[32m2025-09-22 19:08:46.882[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/category[0m +[32m2025-09-22 19:08:47.220[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 19:08:47.220[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 19:35:46.700[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 19:35:46.701[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m +[32m2025-09-22 19:36:39.565[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m18[0m - [1m请求: GET http://127.0.0.1:8082/blog/page?currentPage=1&pageSize=10[0m +[32m2025-09-22 19:36:39.565[0m | [1mINFO [0m | [36mmiddleware.exceptions[0m:[36mglobal_exception_handler[0m:[36m20[0m - [1m查询参数: {'currentPage': '1', 'pageSize': '10'}[0m diff --git a/utils/__pycache__/blog_utils.cpython-310.pyc b/utils/__pycache__/blog_utils.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fcc0f75a10b3fac21d1c1ff35aeecfea4eef8a2d GIT binary patch literal 2318 zcmZWqU2GIp6rMXXJ2Rc`w%aWNMWc)VODMh&G>svYc7Z1SOP3-}s_U?KwmW4zv)q|! zOEXRQmj??*11LeEn21K97^7$^!6)OZuk&hm+dlbdEHUw%*_LkWZ0^}}&OP_u^PPLn zxppk3a`62Y`=jt0aDSpu`$-_|gW+5PLODu`+$hlqL7p%2qk<*?FK8kawa73>Be#hr zQOS_0Y$$n=DzxsLsMS%`P(Y)Crk+MYQ%_@|jSQLw+6bB`jnk%coED=AL(cQGnQj7Y z1AWRMbaS{`$V+q!-3r=9+LGZ?+m^s5E=2-)z&PO T zWOcf#ue#EfTrtKy82Yt@1W?7&M?1O)JJZ>YL+t~Zl)x0w2a%lZS#BWa3Of6mV-28N z-qYDO)G;wJbkKAUdB^&hJ!0fsXXqG2rPVRmn3*$%Jl8B%RoRf;RXQ0o3>$8C+-5Wz zZrTWYIdLGOEb<~zc!em0KPB=Em4Uiuxh{U_E)OG&ANuHXF84GC(IMV(5No2d^vU_f z*}2NKAD6B?N|vXu%s-s|>zC{0ix-wYy16b|Ye%idtR_lrtC6eSE<6RIrVgarJF}Vo zbh ~oHGnLb`>#(kz1&J_yy?pO>`NH|~ zy`R^o$hx(dD7`5@5Q>HsB=&dr9n5A1dwSXj-p+RP4fY-e*qh+!jj-bg8&e|dc%!2_ zJGm2#94z&y93>)QTYy~$7$foo@XH|h+z5AzP%?uBLRh0uZt;|#AylZs9uY=FfG&D3 zfbsm?rN!9?mG92X|8%!n8vw3y@xj73vt9k=8~4kfotkVs+Iqld<2s`TMQ)kw3`-yt z3FHFYkincl0KbEXQ!1KJzPX|a*Aj>Y8w#HfWLE6~LE}U=zq%1}8^OmAe06cwEWH8l zIhd(YNb?3ra+U-kP(3J?tUkQ);xPtK68v`%utC58>^?Wfv3e>@5$icBhEjq?K-x;B zP->wPNKI4@r6iR>QmKNH^D3 ?g(wD(KVvZd6&k+x%X((+FUB(?FKlDcfP26{^1~iZ*52LE1m4)>G_8@ z7QUZbn7dj2=!41+mly9`EPwh{HG?&I&^m6} 6E!WM z8Pj3ywzH;{xA(y!XAcljfZiuakQQqr4h5p1URC}Es>J^RDk+bFit&Ge@(c@vJqrX* z#VRvt4wGi}!$Ol`bii;h0ju2uE`uAvGJ 9>{s!arKhP zFeX9$s7;NcvkP}&=nmVAB!Q$J4Ftz!fdCm)eR?AKqOH4OZw}j36;=oa52*1F-$NF* jdF4$w#48$m@qKb||0veGAPS0*5E9J^Rf#qz+qVA)$y{w> literal 0 HcmV?d00001 diff --git a/utils/__pycache__/common.cpython-310.pyc b/utils/__pycache__/common.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..90be75269e9561ac1ba1402f74ebea6855c9b8ff GIT binary patch literal 850 zcmZXSL2DC16vt;~cat=bpjC<|NpD#sq4uVPpr)XwA_yMR4I$YX>( PBv z4+Zt=CF!l;q2NU%`2gNL&ryxEr`$dHW}`9Hfq6Uc&CGlM{k;h@nKXj2I{kA0Ge+o} zb{2;T&NY}~4GcvT`>2X2VVD{W-!rL6tzEN979t6ngor`$9b~6Y;1=3cX3%IcmEcT9 zJaD1TeCV|WvjS7(z(_Q}6jRbeL!&?QjF~qeLj*a^=ms2{9POPPjwT 2#c% zp1c(`Z}V`6xl%YyKin<|#vgeub0X>a!g0e^D-4S5Co1b|adjEiV_llG&?ZZkF<*kk zDNwqa-i<+BghdYxpdCZp2Uvj2pyn>>;SKa0Vt~o|gK3e-9Md8@!1NbP%xO*yFezMD z|0^*-fY9>-m}j7+mh9sm9-tw*i!gdfsBRVBw6U_JCw*oUMT%<*cVb>MlY+ZyskF@k z)@k!{M(5MNNS>~s?&?ev(1|e>OMd7!d{HjW&qGQ}w0%!1b0_oyo5USaX&~GV0~Sc} zZ>{X rAe!(IECWV%bmBcUI CMD2|L literal 0 HcmV?d00001 diff --git a/utils/blog_utils.py b/utils/blog_utils.py index cc2aca7..4eeb515 100644 --- a/utils/blog_utils.py +++ b/utils/blog_utils.py @@ -2,6 +2,56 @@ from fastapi import Request from models.blog import BlogVisit +# 博客概要字数 +BLOG_SUMMARY_COUNT = 100 + +# 阅读速度 600 字/分钟 +READ_SPEED = 600.0 + +# 博客非统计字符 +EXCLUDE_CHARS = [' ', '\n', '\t'] + + +def get_word_count(text: str) -> int: + """ + 获取文本字数 + + :param text: 文本 + :return: 字数 + """ + count = 0 + + if not text: # 检查None或空字符串 + return count + + for char in text: + if char not in EXCLUDE_CHARS: + count += 1 + + return count + + +def get_read_duration(word_count: int) -> float: + """ + 获取阅读时长 单位:分钟 + + :param word_count: 文本字数 + :return: 阅读时长 + """ + return word_count / READ_SPEED + + +def get_blog_summary(content: str) -> str: + """ + 获取简要信息 + + :param content: 博客内容 + :return: 简要信息 + """ + if len(content) > BLOG_SUMMARY_COUNT: + return content[:BLOG_SUMMARY_COUNT] + return content + def get_client_ip(request): """从请求中获取客户端IP地址"""