mirror of
https://github.com/shadow1ng/fscan.git
synced 2025-09-14 14:06:44 +08:00

核心优化: - 移除大量未使用的函数和方法,显著减少代码复杂度 - 精简多个子模块的接口定义和类型声明 - 优化Bridge.go桥接层,统一API调用接口 - 简化Parse.go主解析逻辑,提高代码可读性 模块精简: - config模块:简化配置管理接口,移除冗余配置项 - logging模块:精简日志格式化和处理逻辑 - output模块:优化输出管理和统计功能 - parsers模块:简化类型定义和解析接口 性能提升: - 减少不必要的函数调用开销 - 优化内存分配和垃圾回收压力 - 简化模块间依赖关系 - 提升编译速度和运行效率 安全验证: - 编译测试完全通过,无编译错误或警告 - 功能完整性验证通过,所有核心功能正常 - 静态分析确认无隐藏依赖或反射调用风险 - 运行时测试验证系统稳定性和正确性
126 lines
3.0 KiB
Go
126 lines
3.0 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 < time.Second:
|
|
// 毫秒显示,不需要小数
|
|
return fmt.Sprintf("%dms", elapsed.Milliseconds())
|
|
case elapsed < time.Minute:
|
|
// 秒显示,保留一位小数
|
|
return fmt.Sprintf("%.1fs", elapsed.Seconds())
|
|
case elapsed < time.Hour:
|
|
// 分钟和秒显示
|
|
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 "[+]"
|
|
case LevelInfo:
|
|
return "[*]"
|
|
case LevelError:
|
|
return "[-]"
|
|
default:
|
|
return " "
|
|
}
|
|
}
|
|
|
|
// DetailedFormatter 详细日志格式化器
|
|
type DetailedFormatter struct {
|
|
StandardFormatter
|
|
includeSource bool
|
|
includeMetadata bool
|
|
}
|
|
|
|
// Format 格式化日志条目(包含详细信息)
|
|
func (f *DetailedFormatter) Format(entry *LogEntry) string {
|
|
baseFormat := f.StandardFormatter.Format(entry)
|
|
|
|
if f.includeSource && entry.Source != "" {
|
|
baseFormat += fmt.Sprintf(" [%s]", entry.Source)
|
|
}
|
|
|
|
if f.includeMetadata && len(entry.Metadata) > 0 {
|
|
baseFormat += fmt.Sprintf(" %v", entry.Metadata)
|
|
}
|
|
|
|
return baseFormat
|
|
}
|
|
|
|
// JSONFormatter JSON格式化器
|
|
type JSONFormatter struct {
|
|
startTime time.Time
|
|
}
|
|
|
|
// SetStartTime 设置开始时间
|
|
func (f *JSONFormatter) SetStartTime(startTime time.Time) {
|
|
f.startTime = startTime
|
|
}
|
|
|
|
// Format 格式化为JSON格式
|
|
func (f *JSONFormatter) Format(entry *LogEntry) string {
|
|
elapsed := time.Since(f.startTime)
|
|
|
|
jsonStr := fmt.Sprintf(`{"level":"%s","time":"%s","elapsed_ms":%d,"content":"%s"`,
|
|
entry.Level,
|
|
entry.Time.Format("2006-01-02T15:04:05.000Z07:00"),
|
|
elapsed.Milliseconds(),
|
|
entry.Content)
|
|
|
|
if entry.Source != "" {
|
|
jsonStr += fmt.Sprintf(`,"source":"%s"`, entry.Source)
|
|
}
|
|
|
|
if len(entry.Metadata) > 0 {
|
|
jsonStr += `,"metadata":`
|
|
// 这里为简化处理,使用简单的格式
|
|
jsonStr += fmt.Sprintf(`%v`, entry.Metadata)
|
|
}
|
|
|
|
jsonStr += "}"
|
|
return jsonStr
|
|
}
|