mirror of
https://github.com/impact-eintr/netstack.git
synced 2025-10-24 13:13:06 +08:00
尝试写一个日志管理 以协议为控制粒度
This commit is contained in:
@@ -5,6 +5,7 @@ import (
|
||||
"fmt"
|
||||
"log"
|
||||
"net"
|
||||
"netstack/logger"
|
||||
"netstack/tcpip"
|
||||
"netstack/tcpip/link/fdbased"
|
||||
"netstack/tcpip/link/tuntap"
|
||||
@@ -140,6 +141,7 @@ func main() {
|
||||
// conn.Close()
|
||||
//}()
|
||||
|
||||
//logger.SetFlags(logger.TCP)
|
||||
go func() { // echo server
|
||||
listener := tcpListen(s, proto, addr, localPort)
|
||||
conn, err := listener.Accept()
|
||||
@@ -150,7 +152,9 @@ func main() {
|
||||
if _, err := conn.Read(buf); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
logger.GetInstance().Info(logger.TCP, func() {
|
||||
fmt.Println(string(buf))
|
||||
})
|
||||
if string(buf) != "" {
|
||||
conn.Write([]byte("Server echo"))
|
||||
}
|
||||
|
||||
49
logger/logger.go
Normal file
49
logger/logger.go
Normal file
@@ -0,0 +1,49 @@
|
||||
package logger
|
||||
|
||||
import (
|
||||
"sync"
|
||||
)
|
||||
|
||||
const (
|
||||
IP = 1 << iota
|
||||
UDP
|
||||
TCP
|
||||
)
|
||||
|
||||
type logger struct {
|
||||
flags uint8
|
||||
}
|
||||
|
||||
var instance *logger
|
||||
var once sync.Once
|
||||
|
||||
// GetInstance 获取日志实例
|
||||
func GetInstance() *logger {
|
||||
once.Do(func() {
|
||||
instance = &logger{
|
||||
//flags: 255,
|
||||
}
|
||||
})
|
||||
return instance
|
||||
}
|
||||
|
||||
// SetFlags 设置输出类型
|
||||
func SetFlags(flags uint8) {
|
||||
GetInstance().flags = flags
|
||||
}
|
||||
|
||||
/*
|
||||
logger.GetInstance(IP|TCP)
|
||||
|
||||
logger.GetInstance().Info(logger.IP, msg) // 会输出
|
||||
|
||||
logger.GetInstance().Info(logger.UDP, msg) // 不会输出
|
||||
|
||||
|
||||
*/
|
||||
|
||||
func (l *logger) Info(mask uint8, f func()) {
|
||||
if mask&l.flags != 0 {
|
||||
f()
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,7 @@ package ipv4
|
||||
|
||||
import (
|
||||
"log"
|
||||
"netstack/logger"
|
||||
"netstack/tcpip"
|
||||
"netstack/tcpip/buffer"
|
||||
"netstack/tcpip/header"
|
||||
@@ -129,7 +130,9 @@ func (e *endpoint) HandlePacket(r *stack.Route, vv buffer.VectorisedView) {
|
||||
if !h.IsValid(vv.Size()) {
|
||||
return
|
||||
}
|
||||
logger.GetInstance().Info(logger.IP, func() {
|
||||
log.Println(h)
|
||||
})
|
||||
|
||||
hlen := int(h.HeaderLength())
|
||||
tlen := int(h.TotalLength())
|
||||
|
||||
@@ -3,6 +3,7 @@ package tcp
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"netstack/logger"
|
||||
"netstack/tcpip/buffer"
|
||||
"netstack/tcpip/header"
|
||||
"netstack/tcpip/seqnum"
|
||||
@@ -122,8 +123,10 @@ func (s *segment) parse() bool {
|
||||
s.options = h.Options()
|
||||
s.parsedOptions = header.ParseTCPOptions(s.options)
|
||||
|
||||
logger.GetInstance().Info(logger.TCP, func() {
|
||||
log.Println(h)
|
||||
fmt.Println(s.parsedOptions)
|
||||
})
|
||||
|
||||
s.data.TrimFront(offset)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user