完善日志输出配置

This commit is contained in:
2025-03-05 10:20:02 +08:00
parent a1717ff0d1
commit ae7fcfe484
6 changed files with 54 additions and 20 deletions

View File

@@ -1,12 +1,16 @@
## todo
日志格式自定义转换
客户端断开后端口未释放问题
需要压测
ProxyConn 直接实现 Conn 相同的接口,不再取出 Conn 使用
配置退出等待时间
log 控制台颜色,输出错误堆栈
输出错误堆栈
读取 conn 时加上超时机制
@@ -18,9 +22,11 @@ log 控制台颜色,输出错误堆栈
在控制通道直接传输目标地址,客户端可以同时开始数据通道和目标地址的连接建立
检查退出超时的问题
### 长期
退出顺序好像有问题,需要检查
需要测试,考虑是否切换到 gnet
实现一个 socks context 以在子组件中获取 socks 相关信息

View File

@@ -1,6 +1,7 @@
# 应用配置
APP_CTRL_PORT=18080
APP_DATA_PORT=18081
APP_LOG_MODE=dev# dev | test
# 数据库配置
DB_HOST=localhost

View File

@@ -25,6 +25,7 @@ services:
environment:
APP_CTRL_PORT: $APP_CTRL_PORT
APP_DATA_PORT: $APP_DATA_PORT
APP_LOG_MODE: $APP_LOG_MODE
DB_HOST: $DB_HOST
DB_PORT: $DB_PORT
DB_DATABASE: $DB_DATABASE
@@ -50,7 +51,6 @@ services:
- "8686:8686"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /var/lib/docker/containers:/var/lib/docker/containers:ro
- /var/log/vector:/temp/vector
networks:
- proxy-server-test

View File

@@ -1,3 +1,5 @@
timezone = "Asia/Shanghai"
[api]
enabled = true
address = "0.0.0.0:8686"
@@ -11,6 +13,11 @@ inputs = ["docker"]
type = "remap"
source = '''
. = parse_json!(.message)
.time, err = format_timestamp(parse_timestamp!(.time, "%+"), "%Y-%m-%dT%H:%M:%S", "Asia/Shanghai")
if err != null {
log("Unable to parse JSON: " + err, level: "error")
abort
}
'''
# ===============

15
server/pkg/env/env.go vendored
View File

@@ -12,6 +12,7 @@ import (
var (
AppCtrlPort uint16
AppDataPort uint16
AppLogMode string
DbHost string
DbPort uint16
@@ -29,6 +30,7 @@ func Init() {
slog.Debug("没有本地环境变量文件")
}
// AppCtrlPort
appCtrlPortStr := os.Getenv("APP_CTRL_PORT")
if appCtrlPortStr == "" {
panic("环境变量 APP_CTRL_PORT 未设置")
@@ -39,6 +41,7 @@ func Init() {
}
AppCtrlPort = uint16(appCtrlPort)
// AppDataPort
appDataPortStr := os.Getenv("APP_DATA_PORT")
if appDataPortStr == "" {
panic("环境变量 APP_DATA_PORT 未设置")
@@ -49,11 +52,19 @@ func Init() {
}
AppDataPort = uint16(appDataPort)
// AppLogMode
appLogMode := os.Getenv("APP_LOG_MODE")
if appLogMode == "" {
AppLogMode = "dev"
}
// DbHost
DbHost = os.Getenv("DB_HOST")
if DbHost == "" {
panic("环境变量 DB_HOST 未设置")
}
// DbPort
dbPortStr := os.Getenv("DB_PORT")
if dbPortStr == "" {
dbPortStr = "5432"
@@ -64,21 +75,25 @@ func Init() {
}
DbPort = uint16(dbPort)
// DbDatabase
DbDatabase = os.Getenv("DB_DATABASE")
if DbDatabase == "" {
panic("环境变量 DB_DATABASE 未设置")
}
// DbUsername
DbUsername = os.Getenv("DB_USERNAME")
if DbUsername == "" {
panic("环境变量 DB_USERNAME 未设置")
}
// DbPassword
DbPassword = os.Getenv("DB_PASSWORD")
if DbPassword == "" {
panic("环境变量 DB_PASSWORD 未设置")
}
// DbTimezone
DbTimezone = os.Getenv("DB_TIMEZONE")
if DbTimezone == "" {
DbTimezone = "Asia/Shanghai"

View File

@@ -12,6 +12,9 @@ import (
"sync"
"syscall"
"time"
"github.com/lmittmann/tint"
"github.com/mattn/go-colorable"
)
type Context struct {
@@ -75,23 +78,25 @@ func Start() {
}
func initLog() {
// writer := colorable.NewColorable(os.Stdout)
// logger := slog.New(tint.NewHandler(writer, &tint.Options{
// Level: slog.LevelDebug,
// TimeFormat: time.RFC3339,
// ReplaceAttr: func(_ []string, attr slog.Attr) slog.Attr {
// err, ok := attr.Value.Any().(error)
// if !ok {
// return attr
// }
// return tint.Err(err)
// },
// }))
// slog.SetDefault(logger)
handler := slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{
Level: slog.LevelDebug,
})
slog.SetDefault(slog.New(handler))
switch env.AppLogMode {
case "dev":
writer := colorable.NewColorable(os.Stdout)
logger := slog.New(tint.NewHandler(writer, &tint.Options{
Level: slog.LevelDebug,
TimeFormat: time.RFC3339,
ReplaceAttr: func(_ []string, attr slog.Attr) slog.Attr {
err, ok := attr.Value.Any().(error)
if ok {
return tint.Err(err)
}
return attr
},
}))
slog.SetDefault(logger)
case "test":
logger := slog.New(slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{}))
slog.SetDefault(logger)
}
}
func startFwdServer(ctx context.Context) error {