From 2a5212e15db68bcb56bce97026023d33df5aded9 Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Sat, 27 Aug 2022 01:19:52 +0800 Subject: [PATCH] =?UTF-8?q?:art:=20=E6=94=AF=E6=8C=81=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E6=97=A5=E5=BF=97=E6=96=87=E4=BB=B6=20https:?= =?UTF-8?q?//github.com/siyuan-note/siyuan/issues/5726?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/api/router.go | 1 + kernel/api/system.go | 10 ++++++++++ kernel/model/export.go | 44 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 55 insertions(+) diff --git a/kernel/api/router.go b/kernel/api/router.go index e21c8d5d4..3c416a6f9 100644 --- a/kernel/api/router.go +++ b/kernel/api/router.go @@ -49,6 +49,7 @@ func ServeAPI(ginServer *gin.Engine) { ginServer.Handle("POST", "/api/system/setUILayout", model.CheckAuth, setUILayout) ginServer.Handle("POST", "/api/system/getConf", model.CheckAuth, getConf) ginServer.Handle("POST", "/api/system/checkUpdate", model.CheckAuth, checkUpdate) + ginServer.Handle("POST", "/api/system/exportLog", model.CheckAuth, exportLog) ginServer.Handle("POST", "/api/account/login", model.CheckAuth, login) ginServer.Handle("POST", "/api/account/checkActivationcode", model.CheckAuth, checkActivationcode) diff --git a/kernel/api/system.go b/kernel/api/system.go index 4f6b8fa10..aaf7d136b 100644 --- a/kernel/api/system.go +++ b/kernel/api/system.go @@ -131,6 +131,16 @@ func checkUpdate(c *gin.Context) { model.CheckUpdate(showMsg) } +func exportLog(c *gin.Context) { + ret := gulu.Ret.NewResult() + defer c.JSON(http.StatusOK, ret) + + zipPath := model.ExportSystemLog() + ret.Data = map[string]interface{}{ + "zip": zipPath, + } +} + var start = true // 是否是启动 func getConf(c *gin.Context) { ret := gulu.Ret.NewResult() diff --git a/kernel/model/export.go b/kernel/model/export.go index 1a597aa2a..c2d26b681 100644 --- a/kernel/model/export.go +++ b/kernel/model/export.go @@ -47,6 +47,50 @@ import ( "github.com/siyuan-note/siyuan/kernel/util" ) +func ExportSystemLog() (zipPath string) { + exportFolder := filepath.Join(util.TempDir, "export", "system-log") + os.RemoveAll(exportFolder) + if err := os.MkdirAll(exportFolder, 0755); nil != err { + logging.LogErrorf("create export temp folder failed: %s", err) + return + } + + appLog := filepath.Join(util.HomeDir, ".config", "siyuan", "app.log") + if gulu.File.IsExist(appLog) { + to := filepath.Join(exportFolder, "app.log") + if err := gulu.File.CopyFile(appLog, to); nil != err { + logging.LogErrorf("copy app log from [%s] to [%s] failed: %s", err, appLog, to) + } + } + kernelLog := filepath.Join(util.TempDir, "siyuan.log") + if gulu.File.IsExist(kernelLog) { + to := filepath.Join(exportFolder, "siyuan.log") + if err := gulu.File.CopyFile(kernelLog, to); nil != err { + logging.LogErrorf("copy kernel log from [%s] to [%s] failed: %s", err, kernelLog, to) + } + } + + zipPath = exportFolder + ".zip" + zip, err := gulu.Zip.Create(zipPath) + if nil != err { + logging.LogErrorf("create export log zip [%s] failed: %s", exportFolder, err) + return "" + } + + if err = zip.AddDirectory("log", exportFolder); nil != err { + logging.LogErrorf("create export log zip [%s] failed: %s", exportFolder, err) + return "" + } + + if err = zip.Close(); nil != err { + logging.LogErrorf("close export log zip failed: %s", err) + } + + os.RemoveAll(exportFolder) + zipPath = "/export/" + url.PathEscape(filepath.Base(zipPath)) + return +} + func ExportNotebookSY(id string) (zipPath string) { zipPath = exportBoxSYZip(id) return