Files
fscan/main.go
T
ZacharyZcR 8312808769 refactor(logging): 统一日志前缀,删除废弃的 LogBase
- 删除 LogBase 函数,所有调用迁移到 LogInfo/LogError
- 新增 PrefixDebug ([.]) 前缀,所有日志级别现在都有前缀
- 修复日志输出缩进不一致的问题
- 删除未使用的 PrefixDefault 常量
2026-01-21 18:29:47 +08:00

71 lines
1.7 KiB
Go

package main
import (
"os"
"os/signal"
"syscall"
"github.com/shadow1ng/fscan/common"
"github.com/shadow1ng/fscan/common/debug"
"github.com/shadow1ng/fscan/common/i18n"
"github.com/shadow1ng/fscan/core"
"github.com/shadow1ng/fscan/web"
// 导入统一插件系统
_ "github.com/shadow1ng/fscan/plugins/local"
_ "github.com/shadow1ng/fscan/plugins/services"
_ "github.com/shadow1ng/fscan/plugins/web"
)
func main() {
// 启动 pprof(仅调试版本)
debug.Start()
defer debug.Stop()
// 解析命令行参数
var info common.HostInfo
if err := common.Flag(&info); err != nil {
if err == common.ErrShowHelp {
os.Exit(0) // 显示帮助是正常退出
}
common.LogError(i18n.Tr("param_error", err))
os.Exit(1)
}
// Web模式:启动Web服务器
if common.WebMode {
if err := web.StartServer(common.WebPort); err != nil {
common.LogError(err.Error())
os.Exit(1)
}
return
}
// 检查参数互斥性
if err := common.ValidateExclusiveParams(&info); err != nil {
common.LogError(i18n.Tr("error_generic", err))
os.Exit(1)
}
// 统一初始化:解析 → 配置 → 输出
result, err := common.Initialize(&info)
if err != nil {
common.LogError(i18n.Tr("init_failed", err))
os.Exit(1)
}
// 设置信号处理,确保 Ctrl+C 时能正确保存结果
sigChan := make(chan os.Signal, 1)
signal.Notify(sigChan, os.Interrupt, syscall.SIGTERM)
go func() {
<-sigChan
common.LogInfo(i18n.GetText("received_exit_signal"))
_ = common.Cleanup() // 确保结果写入磁盘
os.Exit(130) // 128 + SIGINT(2) = 130,标准的中断退出码
}()
defer func() { _ = common.Cleanup() }()
// 执行扫描
core.RunScan(*result.Info, result.Config, result.State)
}