mirror of
https://github.com/shadow1ng/fscan.git
synced 2025-09-14 05:56:46 +08:00

- 重命名 Common -> common,WebScan -> webscan,遵循 Go 包命名约定 - 修复模块路径大小写不匹配导致的编译错误 - 清理依赖项,优化 go.mod 文件 - 添加 Docker 测试环境配置文件 - 新增镜像拉取脚本以处理网络超时问题 - 成功编译生成 fscan v2.2.1 可执行文件 该修复解决了 Linux 系统下包名大小写敏感导致的模块解析失败问题。
76 lines
2.1 KiB
Go
76 lines
2.1 KiB
Go
package logging
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
)
|
|
|
|
// StandardFormatter 标准日志格式化器
|
|
type StandardFormatter struct {
|
|
startTime time.Time
|
|
}
|
|
|
|
// NewStandardFormatter 创建标准格式化器
|
|
func NewStandardFormatter() *StandardFormatter {
|
|
return &StandardFormatter{
|
|
startTime: time.Now(),
|
|
}
|
|
}
|
|
|
|
// SetStartTime 设置开始时间
|
|
func (f *StandardFormatter) SetStartTime(startTime time.Time) {
|
|
f.startTime = startTime
|
|
}
|
|
|
|
// Format 格式化日志条目
|
|
func (f *StandardFormatter) Format(entry *LogEntry) string {
|
|
elapsed := time.Since(f.startTime)
|
|
timeStr := f.formatElapsedTime(elapsed)
|
|
prefix := f.getLevelPrefix(entry.Level)
|
|
|
|
return fmt.Sprintf("[%s] %s %s", timeStr, prefix, entry.Content)
|
|
}
|
|
|
|
// formatElapsedTime 格式化经过的时间
|
|
func (f *StandardFormatter) formatElapsedTime(elapsed time.Duration) string {
|
|
switch {
|
|
case elapsed < MaxMillisecondDisplay:
|
|
// 毫秒显示,不需要小数
|
|
return fmt.Sprintf("%dms", elapsed.Milliseconds())
|
|
case elapsed < MaxSecondDisplay:
|
|
// 秒显示,保留一位小数
|
|
return fmt.Sprintf("%.1fs", elapsed.Seconds())
|
|
case elapsed < MaxMinuteDisplay:
|
|
// 分钟和秒显示
|
|
minutes := int(elapsed.Minutes())
|
|
seconds := int(elapsed.Seconds()) % 60
|
|
return fmt.Sprintf("%dm%ds", minutes, seconds)
|
|
default:
|
|
// 小时、分钟和秒显示
|
|
hours := int(elapsed.Hours())
|
|
minutes := int(elapsed.Minutes()) % 60
|
|
seconds := int(elapsed.Seconds()) % 60
|
|
return fmt.Sprintf("%dh%dm%ds", hours, minutes, seconds)
|
|
}
|
|
}
|
|
|
|
// getLevelPrefix 获取日志级别前缀
|
|
func (f *StandardFormatter) getLevelPrefix(level LogLevel) string {
|
|
switch level {
|
|
case LevelSuccess:
|
|
return PrefixSuccess
|
|
case LevelInfo:
|
|
return PrefixInfo
|
|
case LevelError:
|
|
return PrefixError
|
|
default:
|
|
return PrefixDefault
|
|
}
|
|
}
|
|
|
|
// =============================================================================================
|
|
// 已删除的死代码(未使用):
|
|
// DetailedFormatter 及其 Format() 方法
|
|
// JSONFormatter 及其 SetStartTime() 和 Format() 方法
|
|
// =============================================================================================
|