将日志/slog发送到golang中的API端点

问题描述 投票:0回答:1

假设这段代码:

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...类似的东西。

go endpoint slog
1个回答
0
投票

我认为,您可以将

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"}
© www.soinside.com 2019 - 2024. All rights reserved.