假设这段代码:
import (
slog "log/slog"
...
)
func main(){
v1 := "10"
v2 := "bada"
// logger01 := slog.New(slog.NewJSONHandler(os.Stdout, nil))
logger01 := slog.New(slog.NewTextHandler(os.Stderr, nil))
// need help here to send logger01 to an API endpoint, such as Localhost.
}
我想将 JSON 或字符串发送到本地主机 API 端点,而不是发送到控制台。
理想情况下,理想情况下,我会拨打本地主机并发送一个 io.writer...类似的东西。
我认为,您可以将
net.Conn
传递给 slog.NewJSONHandler
作为 io.Writer
。这样你就可以利用Go中的socket编程了。
我写了简单的示例代码。
package main
import (
"bufio"
"fmt"
"log"
"log/slog"
"net"
"time"
)
func loggingServer() {
listener, err := net.Listen("tcp", "localhost:50002")
if err != nil {
log.Fatal(err.Error())
}
go func() {
for {
conn, err := listener.Accept()
if err != nil {
log.Printf("failed to accept connection: %v\n", err)
}
go handlerConn(conn)
}
}()
}
func handlerConn(conn net.Conn) {
reader := bufio.NewReader(conn)
for {
msg, err := reader.ReadString('\n')
if err != nil {
log.Printf("faild to read from conn: %v\n", err)
break
}
fmt.Println("In loggingServer: ", msg)
}
}
func main() {
go loggingServer()
conn, err := net.Dial("tcp", "localhost:50002")
if err != nil {
log.Fatal(err.Error())
}
logger := slog.New(slog.NewJSONHandler(conn, nil))
logger.Info("Test the log to the connection")
logger.Info("It works well")
time.Sleep(5 * time.Second)
}
它在服务器端显示日志
In loggingServer: {"time":"2024-04-10T10:10:41.93804+09:00","level":"INFO","msg":"Test the log to the connection"}
In loggingServer: {"time":"2024-04-10T10:10:46.938184+09:00","level":"INFO","msg":"It works well"}