commit f0cb950bc293eea557554a566a3e1d0f76136ed8 Author: Kaxi <1042864399@qq.com> Date: Thu May 23 01:23:28 2024 +0800 项目初始化 diff --git a/cfg.go b/cfg.go new file mode 100644 index 0000000..6260867 --- /dev/null +++ b/cfg.go @@ -0,0 +1,24 @@ +package main + +import ( + "gopkg.in/ini.v1" + "log" +) + +type Cfg struct { + Dir string `ini:"dir"` // "logs" + Match string `ini:"match"` // "warn" + Url string `ini:"url"` // "" + Key string `ini:"key"` // "" + Info string `ini:"info"` // "" +} + +var C = Cfg{} + +func init() { + load, err := ini.Load("log.ini") + if err != nil { + log.Fatal(err) + } + load.MapTo(&C) +} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..ca3659e --- /dev/null +++ b/go.mod @@ -0,0 +1,5 @@ +module log-node + +go 1.21 + +require gopkg.in/ini.v1 v1.67.0 // indirect diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..a8937af --- /dev/null +++ b/go.sum @@ -0,0 +1,2 @@ +gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= +gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= diff --git a/log.ini b/log.ini new file mode 100644 index 0000000..e078eed --- /dev/null +++ b/log.ini @@ -0,0 +1,5 @@ +dir=logs +match=warn +url=http://192.168.102.21:6801/upload_v2 +key=测试 +info=测试 \ No newline at end of file diff --git a/logs/warn.log b/logs/warn.log new file mode 100644 index 0000000..cdf67df --- /dev/null +++ b/logs/warn.log @@ -0,0 +1,2 @@ +{asdasd,asdasd} +asdasdasd.asdsad \ No newline at end of file diff --git a/main.go b/main.go new file mode 100644 index 0000000..49c3f7b --- /dev/null +++ b/main.go @@ -0,0 +1,48 @@ +package main + +import ( + "fmt" + "os" + "path/filepath" + "regexp" +) + +func main() { + dir := C.Dir + match := C.Match + url := C.Url + key := C.Key + info := C.Info + + regex := regexp.MustCompile(match) + + dirs, err := os.ReadDir(dir) + if err != nil { + fmt.Println(err) + return + } + + for _, item := range dirs { + if regex.MatchString(item.Name()) { + file, err := os.Open(filepath.Join(dir, item.Name())) + if err != nil { + continue + } + var logTexts []string + ReadAfterSeq(file, 0, '\n', func(bytes []byte) { + logTexts = append(logTexts, string(bytes)) + }) + file.Close() + for _, text := range logTexts { + err := requestDingApi(url, message{ + Text: text, + Filename: item.Name(), + Key: key, + Info: info, + }) + fmt.Println(err) + } + } + } + +} diff --git a/reader.go b/reader.go new file mode 100644 index 0000000..bfb7af2 --- /dev/null +++ b/reader.go @@ -0,0 +1,53 @@ +package main + +import ( + "bytes" + "io" +) + +func ReadAfterSeq(r io.Reader, size int64, seq byte, callback func([]byte)) { + var ( + bytes1 []byte + pointer int64 + ) + for { + buf := make([]byte, 200) + n, err := r.Read(buf) + int64n := int64(n) + + if err == io.EOF { + break + } + var begin int64 = -1 + // 若之前指针就大于设置长度开始指向头 + if pointer >= size { + begin = 0 + } else if pointer+int64n >= size { // 若尾巴大于 + begin = size - pointer + } + pointer += int64n + if begin == -1 { + continue + } + + // 查看当前片段是否存在分隔符 + for _, b := range buf[begin:n] { + // if b == 13 { + // continue + // } + if b == seq { + bytes2 := bytes.TrimSpace(bytes1) + if len(bytes2) > 0 { + callback(bytes2) + bytes1 = nil + } + continue + } + bytes1 = append(bytes1, b) + } + + } + if len(bytes1) > 0 { + callback(bytes1) + } +} diff --git a/up.go b/up.go new file mode 100644 index 0000000..bc05640 --- /dev/null +++ b/up.go @@ -0,0 +1,34 @@ +package main + +import ( + "bytes" + "encoding/json" + "fmt" + "io/ioutil" + "net/http" +) + +type message struct { + Text string `form:"text" json:"text"` + Filename string `form:"filename" json:"filename"` + Key string `form:"key" json:"key"` + Info string `form:"info" json:"info"` +} + +func requestDingApi(url string, msg message) error { + b, err := json.Marshal(msg) + if err != nil { + return err + } + resp, err := http.Post(url, "application/json", bytes.NewBuffer(b)) + if err != nil { + return err + } + defer resp.Body.Close() + body, err := ioutil.ReadAll(resp.Body) + if err != nil { + return err + } + fmt.Println("body:%v", string(body)) + return err +}