uniugm/admin/lib/xlog/handler/handler_test.go
2025-04-18 17:17:23 +08:00

63 lines
1.3 KiB
Go

package handler
import (
"strconv"
"sync"
"testing"
"time"
)
func testHandler(goroutineNo int) {
h, err := NewRotatingDayMaxFileHandler("test_log", "shop", 40960, 1000)
if err != nil {
panic(err)
}
wg := new(sync.WaitGroup)
wg.Add(3)
go func(no int) {
for i := 0; i < 10000; i++ {
h.Write([]byte("test content:" + strconv.Itoa(goroutineNo) + ":" + strconv.Itoa(no) + ":" + strconv.Itoa(i) + "\n"))
time.Sleep(time.Millisecond * 2)
}
wg.Done()
}(1)
go func(no int) {
for i := 0; i < 10000; i++ {
h.Write([]byte("test content:" + strconv.Itoa(goroutineNo) + ":" + strconv.Itoa(no) + ":" + strconv.Itoa(i) + "\n"))
time.Sleep(time.Millisecond * 2)
}
wg.Done()
}(2)
go func(no int) {
for i := 0; i < 10000; i++ {
h.Write([]byte("test content:" + strconv.Itoa(goroutineNo) + ":" + strconv.Itoa(no) + ":" + strconv.Itoa(i) + "\n"))
time.Sleep(time.Millisecond * 2)
}
wg.Done()
}(3)
wg.Wait()
h.Write([]byte("tail\n"))
h.Close()
}
func TestHandler(t *testing.T) {
wg := new(sync.WaitGroup)
num := 5
wg.Add(5)
// 并发创建几个协程,模拟多进程并发写归档
// grep "test content" test_log/*|sed 's/^.*test content:\(.*\):\(.*\):\(.*\)$/\3/g'|sort|uniq -c|awk -F' ' '{print $1}'|uniq -ct pull
for i := 0; i < num; i++ {
go func(no int) {
testHandler(no)
wg.Done()
}(i)
}
wg.Wait()
}