更新代码
This commit is contained in:
1 parent
eda7e8bc96
commit
6ff632e0b0
19 files changed
+2033
-197
No files matched your search
@@ -1,40 +1,47 @@
|
||||
// Command viewsagent 是桌面视觉问答助手。
|
||||
//
|
||||
// 程序是一个完整的桌面应用:没有控制台窗口,日志既写在磁盘上,
|
||||
// 也能从界面上的「日志」按钮随时查看。
|
||||
package main
|
||||
|
||||
import (
|
||||
"io"
|
||||
"log/slog"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
"viewsagent/internal/logging"
|
||||
"viewsagent/internal/ui"
|
||||
"viewsagent/internal/win32"
|
||||
)
|
||||
|
||||
func main() {
|
||||
slog.SetDefault(slog.New(slog.NewTextHandler(logWriter(), &slog.HandlerOptions{
|
||||
Level: slog.LevelInfo,
|
||||
})))
|
||||
const appTitle = "视界 Agent"
|
||||
|
||||
if err := ui.Run(); err != nil {
|
||||
func main() {
|
||||
// 内存缓冲:界面上的「日志」弹窗直接读它。
|
||||
buf := logging.NewBuffer(2000)
|
||||
writer, err := logging.Open(logPath(), buf)
|
||||
if err != nil {
|
||||
// 日志文件打不开也要能继续跑,此时只写内存。
|
||||
win32.MessageBox(appTitle, "日志文件无法写入:\n"+err.Error(), win32.MBError)
|
||||
}
|
||||
defer writer.Close()
|
||||
|
||||
slog.SetDefault(slog.New(logging.NewHandler(writer, slog.LevelInfo)))
|
||||
slog.Info("程序启动", "日志文件", logPath())
|
||||
|
||||
if err := ui.Run(buf); err != nil {
|
||||
slog.Error("启动失败", "err", err)
|
||||
// 没有控制台窗口,错误只能靠弹窗告知用户。
|
||||
win32.MessageBox(appTitle, "启动失败:\n"+err.Error(), win32.MBError)
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
// logWriter 同时输出到控制台和配置文件旁边的 app.log,
|
||||
// 打包成无控制台窗口后也能排查问题。
|
||||
func logWriter() io.Writer {
|
||||
// logPath 返回日志文件路径,默认放在用户配置目录下的 viewsagent/app.log。
|
||||
func logPath() string {
|
||||
dir, err := os.UserConfigDir()
|
||||
if err != nil {
|
||||
return os.Stderr
|
||||
return filepath.Join(".", "app.log")
|
||||
}
|
||||
base := filepath.Join(dir, "viewsagent")
|
||||
if err := os.MkdirAll(base, 0o755); err != nil {
|
||||
return os.Stderr
|
||||
}
|
||||
f, err := os.OpenFile(filepath.Join(base, "app.log"), os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0o644)
|
||||
if err != nil {
|
||||
return os.Stderr
|
||||
}
|
||||
return io.MultiWriter(os.Stderr, f)
|
||||
return filepath.Join(dir, "viewsagent", "app.log")
|
||||
}
|
||||
Reference in new issue
Block a user