mirror of
https://github.com/qingchencloud/cftunnel.git
synced 2026-08-31 02:02:40 +08:00
d976ee2c33
- 新增 relay 模式: frp 中继引擎,TCP/UDP 全协议穿透 - 新增 relay server setup: SSH 远程安装 frps 服务端 - 新增 sshutil 包: 纯 Go SSH 连接/远程执行 - 官网: 移动端响应式适配 (480/768/900px 三断点) - 官网: 修复 Star 按钮样式,特性卡片 11→12 - install.sh: 国内镜像源加速 (ghfast/gh-proxy/ghproxy) - Docker Compose + install-relay.sh 服务端部署方案
64 lines
1.1 KiB
Go
64 lines
1.1 KiB
Go
package cmd
|
|
|
|
import (
|
|
"bufio"
|
|
"fmt"
|
|
"os"
|
|
"time"
|
|
|
|
"github.com/qingchencloud/cftunnel/internal/relay"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
var relayLogsFollow bool
|
|
|
|
func init() {
|
|
relayLogsCmd.Flags().BoolVarP(&relayLogsFollow, "follow", "f", false, "实时跟踪日志")
|
|
relayCmd.AddCommand(relayLogsCmd)
|
|
}
|
|
|
|
var relayLogsCmd = &cobra.Command{
|
|
Use: "logs",
|
|
Short: "查看中继客户端日志",
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
logFile := relay.LogFilePath()
|
|
f, err := os.Open(logFile)
|
|
if err != nil {
|
|
return fmt.Errorf("日志文件不存在: %s", logFile)
|
|
}
|
|
defer f.Close()
|
|
|
|
lines, err := tailLines(f, 100)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for _, line := range lines {
|
|
fmt.Println(line)
|
|
}
|
|
|
|
if !relayLogsFollow {
|
|
return nil
|
|
}
|
|
|
|
stat, _ := f.Stat()
|
|
offset := stat.Size()
|
|
for {
|
|
f2, err := os.Open(logFile)
|
|
if err != nil {
|
|
continue
|
|
}
|
|
stat2, _ := f2.Stat()
|
|
if stat2.Size() > offset {
|
|
f2.Seek(offset, 0)
|
|
scanner := bufio.NewScanner(f2)
|
|
for scanner.Scan() {
|
|
fmt.Println(scanner.Text())
|
|
}
|
|
offset = stat2.Size()
|
|
}
|
|
f2.Close()
|
|
time.Sleep(500 * time.Millisecond)
|
|
}
|
|
},
|
|
}
|