service.xpcool.com/api/admin/base/log/log.go
夏犀麟 9010592c9e fix(build): 修正 .gitignore 的 log/ 规则误伤源码包,恢复 HEAD 可编译
问题:.gitignore 第 27 行的 `log/` 未锚定根目录,会匹配任意层级的
log 目录,把下面 4 个**源码包**一并忽略:
  - api/admin/base/log
  - api/admin/system/log
  - internal/service/admin/base/log
  - internal/service/admin/system/log

而引用它们的 internal/controller/admin/log.go 已在库中,于是
「已提交的代码 import 了不存在(未提交)的包」——干净检出后
`go build .` 直接失败:
  no required module provides package service.xpcool.com/api/admin/base/log

因为 service 仓库没有 CI 自动构建,这个问题一直没有暴露,
影响是:新克隆/新设备无法编译,任何干净检出构建都会失败。

修复:
1. 规则改为 `/log/`,只忽略仓库根目录下的运行日志输出目录
   (config.dev.yaml 的 logger.path: "log"),不再误伤同名源码包;
2. 补交被忽略期间漏掉的 4 个 log 包,恢复 HEAD 完整可编译。
2026-09-14 02:34:46 +08:00

41 lines
1.6 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Package admin_base_log 定义服务器日志监控接口契约。
//
// 路由前缀 /api/service/admin/base/log对应 admin_menu 中的:
// - POST /api/service/admin/base/log/files —— monitor:log:view查看日志文件列表
// - POST /api/service/admin/base/log/tail —— monitor:log:tail实时读取日志尾部
package admin_base_log
import "github.com/gogf/gf/v2/frame/g"
// LogFile 描述一个服务器日志文件。
type LogFile struct {
Name string `json:"name"` // 文件名
Path string `json:"path"` // 文件绝对路径
Size int64 `json:"size"` // 文件大小(字节)
ModTime string `json:"modTime"` // 最后修改时间
}
// LogFilesReq 列出服务器日志文件。
type LogFilesReq struct {
g.Meta `path:"/base/log/files" method:"post" tags:"Admin/Base/Log" summary:"日志文件列表"`
}
// LogFilesRes 是 LogFilesReq 的响应。
type LogFilesRes struct {
Dir string `json:"dir"` // 日志目录
Files []*LogFile `json:"files"` // 文件列表
}
// LogTailReq 读取日志文件尾部,支持关键字过滤。
type LogTailReq struct {
g.Meta `path:"/base/log/tail" method:"post" tags:"Admin/Base/Log" summary:"读取日志尾部"`
File string `json:"file" v:"required#日志文件名不能为空"` // 日志文件名(不含目录)
Lines int `json:"lines" d:"200" v:"min:1|max:5000#行数必须在 1-5000 之间"`
Keyword string `json:"keyword"` // 关键字过滤,为空则不过滤
}
// LogTailRes 是 LogTailReq 的响应。
type LogTailRes struct {
Lines []string `json:"lines"` // 日志行
}