diff --git a/go.mod b/go.mod index 246f275a..5df3bb62 100644 --- a/go.mod +++ b/go.mod @@ -18,6 +18,7 @@ require ( github.com/go-rat/utils v1.0.3 github.com/go-resty/resty/v2 v2.15.3 github.com/go-sql-driver/mysql v1.8.1 + github.com/golang-cz/httplog v0.0.0-20241002114323-98e09d6f537a github.com/gorilla/websocket v1.5.3 github.com/hashicorp/go-version v1.7.0 github.com/knadh/koanf/parsers/yaml v0.1.0 @@ -30,6 +31,7 @@ require ( github.com/libdns/libdns v0.2.2 github.com/libdns/tencentcloud v1.0.0 github.com/mholt/acmez/v2 v2.0.3 + github.com/orandin/slog-gorm v1.4.0 github.com/robfig/cron/v3 v3.0.1 github.com/samber/lo v1.47.0 github.com/sethvargo/go-limiter v1.0.0 @@ -39,12 +41,12 @@ require ( github.com/tufanbarisyildirim/gonginx v0.0.0-20241013191809-e73b7dd454e8 github.com/urfave/cli/v3 v3.0.0-alpha9.1 go.uber.org/zap v1.27.0 + go.uber.org/zap/exp v0.3.0 golang.org/x/crypto v0.28.0 golang.org/x/net v0.30.0 gopkg.in/natefinch/lumberjack.v2 v2.2.1 gopkg.in/yaml.v3 v3.0.1 gorm.io/gorm v1.25.12 - moul.io/zapgorm2 v1.3.0 ) require ( diff --git a/go.sum b/go.sum index 7322c509..1f1dee48 100644 --- a/go.sum +++ b/go.sum @@ -6,7 +6,6 @@ github.com/bddjr/hlfhr v1.1.3 h1:O1Vxi7Qf0tOs9oGoSb3Q9KAGTSfh/EXyVMVSO9V1m90= github.com/bddjr/hlfhr v1.1.3/go.mod h1:oyIv4Q9JpCgZFdtH3KyTNWp7YYRWl4zl8k4ozrMAB4g= github.com/beevik/ntp v1.4.3 h1:PlbTvE5NNy4QHmA4Mg57n7mcFTmr1W1j3gcK7L1lqho= github.com/beevik/ntp v1.4.3/go.mod h1:Unr8Zg+2dRn7d8bHFuehIMSvvUYssHMxW3Q5Nx4RW5Q= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -58,6 +57,8 @@ github.com/go-viper/mapstructure/v2 v2.0.0 h1:dhn8MZ1gZ0mzeodTG3jt5Vj/o87xZKuNAp github.com/go-viper/mapstructure/v2 v2.0.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= github.com/gofiber/schema v1.2.0 h1:j+ZRrNnUa/0ZuWrn/6kAtAufEr4jCJ+JuTURAMxNSZg= github.com/gofiber/schema v1.2.0/go.mod h1:YYwj01w3hVfaNjhtJzaqetymL56VW642YS3qZPhuE6c= +github.com/golang-cz/httplog v0.0.0-20241002114323-98e09d6f537a h1:BAyyIK6rc6Tq9vT2KVlPJXD8EVv/LpaFwn4fgfLwtHg= +github.com/golang-cz/httplog v0.0.0-20241002114323-98e09d6f537a/go.mod h1:bgk4Ij/0OQ89UeoFFAQrSNhbbr4rKJ0fwWfo7wc+TCc= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= @@ -74,7 +75,6 @@ github.com/jaevor/go-nanoid v1.4.0 h1:mPz0oi3CrQyEtRxeRq927HHtZCJAAtZ7zdy7vOkrvW github.com/jaevor/go-nanoid v1.4.0/go.mod h1:GIpPtsvl3eSBsjjIEFQdzzgpi50+Bo1Luk+aYlbJzlc= github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= -github.com/jinzhu/now v1.1.4/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= github.com/knadh/koanf/maps v0.1.1 h1:G5TjmUh2D7G2YWf5SQQqSiHRJEjaicvU0KpypqB3NIs= @@ -85,7 +85,6 @@ github.com/knadh/koanf/providers/file v1.1.2 h1:aCC36YGOgV5lTtAFz2qkgtWdeQsgfxUk github.com/knadh/koanf/providers/file v1.1.2/go.mod h1:/faSBcv2mxPVjFrXck95qeoyoZ5myJ6uxN8OOVNJJCI= github.com/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM= github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= @@ -117,7 +116,8 @@ github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdh github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/orandin/slog-gorm v1.4.0 h1:FgA8hJufF9/jeNSYoEXmHPPBwET2gwlF3B85JdpsTUU= +github.com/orandin/slog-gorm v1.4.0/go.mod h1:MoZ51+b7xE9lwGNPYEhxcUtRNrYzjdcKvA8QXQQGEPA= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= @@ -137,8 +137,6 @@ github.com/spf13/cast v1.7.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cA github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= @@ -154,39 +152,29 @@ github.com/tufanbarisyildirim/gonginx v0.0.0-20241013191809-e73b7dd454e8 h1:7yw1 github.com/tufanbarisyildirim/gonginx v0.0.0-20241013191809-e73b7dd454e8/go.mod h1:itu4KWRgrfEwGcfNka+rV4houuirUau53i0diN4lG5g= github.com/urfave/cli/v3 v3.0.0-alpha9.1 h1:1fJU+bltkwN8lF4Sni/X0i1d8XwPIrS82ivZ8qsp/q4= github.com/urfave/cli/v3 v3.0.0-alpha9.1/go.mod h1:FnIeEMYu+ko8zP1F9Ypr3xkZMIDqW3DR92yUtY39q1Y= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= -go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= +go.uber.org/zap/exp v0.3.0 h1:6JYzdifzYkGmTdRR59oYH+Ng7k49H9qVpWwNSsGJj3U= +go.uber.org/zap/exp v0.3.0/go.mod h1:5I384qq7XGxYyByIhHm6jg5CHkGY0nsTfbDLgDDlgJQ= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw= golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.19.0 h1:fEdghXQSo20giMthA7cd28ZC+jts4amQ3YMXiP5oMQ8= golang.org/x/mod v0.19.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= @@ -194,17 +182,13 @@ golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4= golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -235,28 +219,20 @@ golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U= golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.23.0 h1:SGsXPZ+2l4JsgaCKkx+FQ9YZ5XEtA1GZYuoDjenLjvg= golang.org/x/tools v0.23.0/go.mod h1:pnu6ufv6vQkll6szChhK3C3L/ruaIv5eBeztNG8wtsI= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc= gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gorm.io/gorm v1.23.6/go.mod h1:l2lP/RyAtc1ynaTjFksBde/O8v9oOGIApu2/xRitmZk= gorm.io/gorm v1.25.12 h1:I0u8i2hWQItBq1WfE0o2+WuL9+8L21K9e2HHSTE/0f8= gorm.io/gorm v1.25.12/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ= gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU= @@ -285,5 +261,3 @@ modernc.org/strutil v1.2.0 h1:agBi9dp1I+eOnxXeiZawM8F4LawKv4NzGWSaLfyeNZA= modernc.org/strutil v1.2.0/go.mod h1:/mdcBmfOibveCTBxUl5B5l6W+TTH1FXPLHZE6bTosX0= modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= -moul.io/zapgorm2 v1.3.0 h1:+CzUTMIcnafd0d/BvBce8T4uPn6DQnpIrz64cyixlkk= -moul.io/zapgorm2 v1.3.0/go.mod h1:nPVy6U9goFKHR4s+zfSo1xVFaoU7Qgd5DoCdOfzoCqs= diff --git a/internal/app/global.go b/internal/app/global.go index daeda103..338be02d 100644 --- a/internal/app/global.go +++ b/internal/app/global.go @@ -1,13 +1,14 @@ package app import ( + "log/slog" + "github.com/go-chi/chi/v5" ut "github.com/go-playground/universal-translator" "github.com/go-playground/validator/v10" "github.com/go-rat/sessions" "github.com/knadh/koanf/v2" "github.com/robfig/cron/v3" - "go.uber.org/zap" "gorm.io/gorm" "github.com/TheTNB/panel/pkg/queue" @@ -22,7 +23,7 @@ var ( Session *sessions.Manager Cron *cron.Cron Queue *queue.Queue - Logger *zap.Logger + Logger *slog.Logger ) // 定义面板状态常量 diff --git a/internal/bootstrap/db.go b/internal/bootstrap/db.go index d1b5341c..bb507a09 100644 --- a/internal/bootstrap/db.go +++ b/internal/bootstrap/db.go @@ -6,25 +6,16 @@ import ( "github.com/glebarez/sqlite" "github.com/go-gormigrate/gormigrate/v2" + slogGorm "github.com/orandin/slog-gorm" "gorm.io/gorm" - "gorm.io/gorm/logger" - "moul.io/zapgorm2" "github.com/TheTNB/panel/internal/app" "github.com/TheTNB/panel/internal/migration" ) func initOrm() { - logLevel := logger.Error - if app.Conf.Bool("database.debug") { - logLevel = logger.Info - } - zapLogger := zapgorm2.New(app.Logger) - zapLogger.LogMode(logLevel) - zapLogger.SetAsDefault() - db, err := gorm.Open(sqlite.Open(filepath.Join(app.Root, "panel/storage/app.db")), &gorm.Config{ - Logger: zapLogger, + Logger: slogGorm.New(slogGorm.WithHandler(app.Logger.Handler())), SkipDefaultTransaction: true, DisableForeignKeyConstraintWhenMigrating: true, }) diff --git a/internal/bootstrap/logger.go b/internal/bootstrap/logger.go index e57f562b..b7eac073 100644 --- a/internal/bootstrap/logger.go +++ b/internal/bootstrap/logger.go @@ -1,10 +1,12 @@ package bootstrap import ( + "log/slog" "path/filepath" "time" "go.uber.org/zap" + "go.uber.org/zap/exp/zapslog" "go.uber.org/zap/zapcore" "gopkg.in/natefinch/lumberjack.v2" @@ -13,16 +15,15 @@ import ( func initLogger() { writeSyncer := zapcore.AddSync(&lumberjack.Logger{ - Filename: filepath.Join(app.Root, "panel/storage/logs/app.log"), - MaxSize: 10, - MaxBackups: 10, - MaxAge: 30, - Compress: true, + Filename: filepath.Join(app.Root, "panel/storage/logs/app.log"), + MaxSize: 10, + MaxAge: 30, + Compress: true, }) - level := zapcore.InfoLevel + level := zap.InfoLevel if app.Conf.Bool("app.debug") { - level = zapcore.DebugLevel + level = zap.DebugLevel } config := zap.NewProductionEncoderConfig() @@ -34,8 +35,6 @@ func initLogger() { ) logger := zap.New(core) - defer func(logger *zap.Logger) { - _ = logger.Sync() - }(logger) - app.Logger = logger + zap.ReplaceGlobals(logger) + app.Logger = slog.New(zapslog.NewHandler(logger.Core())) } diff --git a/internal/data/task.go b/internal/data/task.go index 58412319..3c21a158 100644 --- a/internal/data/task.go +++ b/internal/data/task.go @@ -1,10 +1,9 @@ package data import ( + "log/slog" "sync" - "go.uber.org/zap" - "github.com/TheTNB/panel/internal/app" "github.com/TheTNB/panel/internal/biz" "github.com/TheTNB/panel/internal/queuejob" @@ -64,7 +63,7 @@ func (r *taskRepo) DispatchWaiting() { var tasks []biz.Task if err := app.Orm.Where("status = ?", biz.TaskStatusWaiting).Find(&tasks).Error; err != nil { - app.Logger.Error("获取待处理任务失败", zap.Error(err)) + app.Logger.Warn("获取待处理任务失败", slog.Any("err", err)) return } @@ -72,7 +71,7 @@ func (r *taskRepo) DispatchWaiting() { if err := app.Queue.Push(queuejob.NewProcessTask(r), []any{ task.ID, }); err != nil { - app.Logger.Error("推送任务失败", zap.Error(err)) + app.Logger.Warn("推送任务失败", slog.Any("err", err)) return } } diff --git a/internal/http/middleware/middleware.go b/internal/http/middleware/middleware.go index f438fabe..a6276d66 100644 --- a/internal/http/middleware/middleware.go +++ b/internal/http/middleware/middleware.go @@ -1,10 +1,12 @@ package middleware import ( + "log/slog" "net/http" "github.com/go-chi/chi/v5/middleware" sessionmiddleware "github.com/go-rat/sessions/middleware" + "github.com/golang-cz/httplog" "github.com/TheTNB/panel/internal/app" ) @@ -16,9 +18,12 @@ func GlobalMiddleware() []func(http.Handler) http.Handler { //middleware.SupressNotFound(app.Http),// bug https://github.com/go-chi/chi/pull/940 middleware.CleanPath, middleware.StripSlashes, - middleware.Logger, - middleware.Recoverer, middleware.Compress(5), + httplog.RequestLogger(app.Logger, &httplog.Options{ + Level: slog.LevelInfo, + LogRequestHeaders: []string{"User-Agent"}, + }), + middleware.Recoverer, Entrance, Status, MustInstall, diff --git a/internal/job/cert_renew.go b/internal/job/cert_renew.go index 280d16fa..a5740c2f 100644 --- a/internal/job/cert_renew.go +++ b/internal/job/cert_renew.go @@ -1,10 +1,9 @@ package job import ( + "log/slog" "time" - "go.uber.org/zap" - "github.com/TheTNB/panel/internal/app" "github.com/TheTNB/panel/internal/biz" "github.com/TheTNB/panel/internal/data" @@ -29,7 +28,7 @@ func (r *CertRenew) Run() { var certs []biz.Cert if err := app.Orm.Preload("Website").Preload("Account").Preload("DNS").Find(&certs).Error; err != nil { - app.Logger.Error("获取证书失败", zap.Error(err)) + app.Logger.Warn("获取证书失败", slog.Any("err", err)) return } @@ -51,7 +50,7 @@ func (r *CertRenew) Run() { _, err = r.certRepo.Renew(cert.ID) if err != nil { - app.Logger.Error("续签证书失败", zap.Error(err)) + app.Logger.Warn("续签证书失败", slog.Any("err", err)) } } } diff --git a/internal/job/monitoring.go b/internal/job/monitoring.go index 89146b62..8c3ebf6d 100644 --- a/internal/job/monitoring.go +++ b/internal/job/monitoring.go @@ -1,10 +1,10 @@ package job import ( + "log/slog" "time" "github.com/spf13/cast" - "go.uber.org/zap" "github.com/TheTNB/panel/internal/app" "github.com/TheTNB/panel/internal/biz" @@ -48,7 +48,7 @@ func (r *Monitoring) Run() { } if err = app.Orm.Create(&biz.Monitor{Info: info}).Error; err != nil { - app.Logger.Error("记录系统监控失败", zap.Error(err)) + app.Logger.Warn("记录系统监控失败", slog.Any("err", err)) return } @@ -62,7 +62,7 @@ func (r *Monitoring) Run() { return } if err = app.Orm.Where("created_at < ?", time.Now().AddDate(0, 0, -day).Format(time.DateTime)).Delete(&biz.Monitor{}).Error; err != nil { - app.Logger.Error("删除过期系统监控失败", zap.Error(err)) + app.Logger.Warn("删除过期系统监控失败", slog.Any("err", err)) return } } diff --git a/internal/job/panel_task.go b/internal/job/panel_task.go index dbb4894d..7cad51b2 100644 --- a/internal/job/panel_task.go +++ b/internal/job/panel_task.go @@ -1,11 +1,10 @@ package job import ( + "log/slog" "runtime" "runtime/debug" - "go.uber.org/zap" - "github.com/TheTNB/panel/internal/app" "github.com/TheTNB/panel/internal/biz" "github.com/TheTNB/panel/internal/data" @@ -32,30 +31,30 @@ func (r *PanelTask) Run() { // 优化数据库 if err := app.Orm.Exec("VACUUM").Error; err != nil { app.Status = app.StatusFailed - app.Logger.Error("优化面板数据库失败", zap.Error(err)) + app.Logger.Warn("优化面板数据库失败", slog.Any("err", err)) } if err := app.Orm.Exec("PRAGMA wal_checkpoint(TRUNCATE);").Error; err != nil { app.Status = app.StatusFailed - app.Logger.Error("优化面板数据库失败", zap.Error(err)) + app.Logger.Warn("优化面板数据库失败", slog.Any("err", err)) } // 备份面板 if err := r.backupRepo.Create(biz.BackupTypePanel, ""); err != nil { - app.Logger.Error("备份面板失败", zap.Error(err)) + app.Logger.Warn("备份面板失败", slog.Any("err", err)) } // 清理备份 path, err := r.backupRepo.GetPath("panel") if err == nil { if err = r.backupRepo.ClearExpired(path, "panel_", 10); err != nil { - app.Logger.Error("清理面板备份失败", zap.Error(err)) + app.Logger.Warn("清理面板备份失败", slog.Any("err", err)) } } // 更新商店缓存 if offline, err := r.settingRepo.GetBool(biz.SettingKeyOfflineMode); err == nil && !offline { if err = r.appRepo.UpdateCache(); err != nil { - app.Logger.Error("更新商店缓存失败", zap.Error(err)) + app.Logger.Warn("更新商店缓存失败", slog.Any("err", err)) } } diff --git a/pkg/cron/logger.go b/pkg/cron/logger.go index 78b649ba..edba83b6 100644 --- a/pkg/cron/logger.go +++ b/pkg/cron/logger.go @@ -1,13 +1,15 @@ package cron -import "go.uber.org/zap" +import ( + "log/slog" +) type Logger struct { - log *zap.Logger + log *slog.Logger debug bool } -func NewLogger(log *zap.Logger, debug bool) *Logger { +func NewLogger(log *slog.Logger, debug bool) *Logger { return &Logger{ debug: debug, log: log, @@ -19,23 +21,22 @@ func (log *Logger) Info(msg string, keysAndValues ...any) { return } - log.log.Info(msg, log.toZapFields(keysAndValues...)...) + log.log.Info(msg, keysAndValues...) } func (log *Logger) Error(err error, msg string, keysAndValues ...any) { - fields := log.toZapFields(keysAndValues...) - fields = append(fields, zap.Error(err)) + fields := []any{slog.Any("err", err)} + fields = append(fields, log.toSlogArgs(keysAndValues...)...) log.log.Error(msg, fields...) } -func (log *Logger) toZapFields(keysAndValues ...any) []zap.Field { - fields := make([]zap.Field, 0, len(keysAndValues)/2) +func (log *Logger) toSlogArgs(keysAndValues ...any) []any { + fields := make([]any, 0, len(keysAndValues)/2) for i := 0; i < len(keysAndValues); i += 2 { if i+1 < len(keysAndValues) { - key, okKey := keysAndValues[i].(string) - value := keysAndValues[i+1] - if okKey { - fields = append(fields, zap.Any(key, value)) + key, ok := keysAndValues[i].(string) + if ok { + fields = append(fields, slog.Any(key, keysAndValues[i+1])) } } } diff --git a/pkg/io/compress.go b/pkg/io/compress.go index fda163dc..ee14067d 100644 --- a/pkg/io/compress.go +++ b/pkg/io/compress.go @@ -2,9 +2,10 @@ package io import ( "errors" - "github.com/TheTNB/panel/pkg/shell" "path/filepath" "strings" + + "github.com/TheTNB/panel/pkg/shell" ) type FormatArchive string