- server: 集成反向代理路由,支持单服务器和虚拟主机两种模式 - loadbalance: 使用 atomic.Bool 替代 bool 实现并发安全的健康状态 - proxy: 适配 atomic.Bool,移除 HealthChecker 不必要的互斥锁 - config: 添加服务器超时配置字段,验证负载均衡算法 - 新增 algorithms.go 提供算法验证函数 - 新增 config.example.yaml 配置示例文件 Co-Authored-By: Claude <noreply@anthropic.com>
54 lines
1.2 KiB
Go
54 lines
1.2 KiB
Go
package logging
|
|
|
|
import (
|
|
"os"
|
|
"time"
|
|
|
|
"github.com/rs/zerolog"
|
|
"github.com/valyala/fasthttp"
|
|
)
|
|
|
|
var log zerolog.Logger
|
|
|
|
// Init 初始化日志系统
|
|
func Init(level string, pretty bool) {
|
|
l := parseLevel(level)
|
|
if pretty {
|
|
log = zerolog.New(zerolog.ConsoleWriter{Out: os.Stdout, TimeFormat: time.RFC3339}).Level(l).With().Timestamp().Logger()
|
|
} else {
|
|
log = zerolog.New(os.Stdout).Level(l).With().Timestamp().Logger()
|
|
}
|
|
}
|
|
|
|
// LogAccess 记录访问日志
|
|
func LogAccess(ctx *fasthttp.RequestCtx, status int, size int64, duration time.Duration) {
|
|
log.Info().
|
|
Str("method", string(ctx.Method())).
|
|
Str("path", string(ctx.Path())).
|
|
Int("status", status).
|
|
Int64("size", size).
|
|
Dur("duration", duration).
|
|
Str("remote_addr", ctx.RemoteAddr().String()).
|
|
Msg("request")
|
|
}
|
|
|
|
// Error 返回 Error 级别日志记录器
|
|
func Error() *zerolog.Event {
|
|
return log.Error()
|
|
}
|
|
|
|
// parseLevel 解析日志级别
|
|
func parseLevel(level string) zerolog.Level {
|
|
switch level {
|
|
case "debug":
|
|
return zerolog.DebugLevel
|
|
case "info":
|
|
return zerolog.InfoLevel
|
|
case "warn":
|
|
return zerolog.WarnLevel
|
|
case "error":
|
|
return zerolog.ErrorLevel
|
|
default:
|
|
return zerolog.InfoLevel
|
|
}
|
|
} |