From 6491a550369f558d96206e522bd0b81bb9f21a29 Mon Sep 17 00:00:00 2001 From: wonderflow Date: Mon, 5 Jun 2017 21:53:40 +0800 Subject: [PATCH 1/3] add user define timeformat layout --- logkit.conf | 2 ++ logkit.go | 6 +++- times/times.go | 70 ++++++++++++++++++++++++--------------------- times/times_test.go | 21 ++++++++++++++ 4 files changed, 66 insertions(+), 33 deletions(-) diff --git a/logkit.conf b/logkit.conf index f73e5a2a5..010b87dd7 100644 --- a/logkit.conf +++ b/logkit.conf @@ -2,5 +2,7 @@ "max_procs": 8, "debug_level": 1, "clean_self_log":true, + "bind_host":"localhost:3000", + "timeformat_layouts":["2006|01|02|-0700"], "confs_path": ["confs*"] } diff --git a/logkit.go b/logkit.go index 420933270..777fe6f92 100644 --- a/logkit.go +++ b/logkit.go @@ -9,6 +9,7 @@ import ( config "github.com/qiniu/logkit/conf" "github.com/qiniu/logkit/mgr" + "github.com/qiniu/logkit/times" "github.com/qiniu/logkit/utils" _ "net/http/pprof" @@ -25,6 +26,7 @@ type Config struct { CleanSelfLog bool `json:"clean_self_log"` CleanSelfDir string `json:"clean_self_dir"` CleanSelfPattern string `json:"clean_self_pattern"` + TimeLayouts []string `json:"timeformat_layouts"` CleanSelfLogCnt int `json:"clean_self_cnt"` mgr.ManagerConfig } @@ -103,7 +105,9 @@ func main() { log.Fatal("config.Load failed:", err) } log.Printf("Config: %#v", conf) - + if conf.TimeLayouts != nil { + times.AddLayout(conf.TimeLayouts) + } if conf.MaxProcs == 0 { conf.MaxProcs = runtime.NumCPU() } diff --git a/times/times.go b/times/times.go index 073900779..f7e050501 100644 --- a/times/times.go +++ b/times/times.go @@ -7,6 +7,44 @@ import ( "time" ) +var layouts = []string{ + "02/Jan/2006:15:04:05 -0700", + "2006/01/02 15:04:05", + "2006-01-02 15:04:05 -0700 MST", + "2006-01-02 15:04:05 -0700", + "2006-01-02 15:04:05", + "2006/01/02 15:04:05 -0700 MST", + "2006/01/02 15:04:05 -0700", + "2006-01-02 -0700 MST", + "2006-01-02 -0700", + "2006-01-02", + "2006/01/02 -0700 MST", + "2006/01/02 -0700", + "2006/01/02", + "02/01/2006--15:04:05", + "02 Jan 06 15:04", + time.ANSIC, + time.UnixDate, + time.RubyDate, + time.RFC822, + time.RFC822Z, + time.RFC850, + time.RFC1123, + time.RFC1123Z, + time.RFC3339, + time.RFC3339Nano, + time.Kitchen, + time.Stamp, + time.StampMilli, + time.StampMicro, + time.StampNano, +} + +// AddLayout 可以增加用户自定义的时间类型 +func AddLayout(udfLayouts []string) { + layouts = append(udfLayouts, layouts...) +} + // Format 跟 PHP 中 date 类似的使用方式,如果 ts 没传递,则使用当前时间 func Format(format string, ts ...time.Time) string { patterns := []string{ @@ -65,38 +103,6 @@ func StrToTime(value string) (time.Time, error) { if value == "" { return time.Now(), errors.New("empty time string") } - layouts := []string{ - "02/Jan/2006:15:04:05 -0700", - "2006/01/02 15:04:05", - "2006-01-02 15:04:05 -0700 MST", - "2006-01-02 15:04:05 -0700", - "2006-01-02 15:04:05", - "2006/01/02 15:04:05 -0700 MST", - "2006/01/02 15:04:05 -0700", - "2006-01-02 -0700 MST", - "2006-01-02 -0700", - "2006-01-02", - "2006/01/02 -0700 MST", - "2006/01/02 -0700", - "2006/01/02", - "02/01/2006--15:04:05", - "02 Jan 06 15:04", - time.ANSIC, - time.UnixDate, - time.RubyDate, - time.RFC822, - time.RFC822Z, - time.RFC850, - time.RFC1123, - time.RFC1123Z, - time.RFC3339, - time.RFC3339Nano, - time.Kitchen, - time.Stamp, - time.StampMilli, - time.StampMicro, - time.StampNano, - } var t time.Time var err error diff --git a/times/times_test.go b/times/times_test.go index 03bacc597..10054228c 100644 --- a/times/times_test.go +++ b/times/times_test.go @@ -1,6 +1,7 @@ package times import ( + "errors" "fmt" "testing" "time" @@ -92,4 +93,24 @@ func TestStrToTime2(t *testing.T) { fmt.Println(tm.String()) nt := tm.Format(time.RFC3339) fmt.Println(nt) + testcase = "2017-06-05T21:00:18+08:00" + tm, err = StrToTime(testcase) + if err != nil { + t.Error(err) + } + fmt.Println(tm.String()) + fmt.Println(time.Now().Format(time.RFC3339)) +} + +func TestAddLayout(t *testing.T) { + tm, err := StrToTime("[02/Jan/2017:15:04:05 -0700]") + if err == nil { + t.Error(errors.New("should have error without layouts")) + } + AddLayout([]string{"[02/Jan/2006:15:04:05 -0700]"}) + tm, err = StrToTime("[02/Jan/2017:15:04:05 -0700]") + if err != nil { + t.Error(err) + } + fmt.Println(tm.String()) } From 5540ba8bafb4ff8f6dea8d9300af15cfa25a97e2 Mon Sep 17 00:00:00 2001 From: wonderflow Date: Mon, 5 Jun 2017 22:10:43 +0800 Subject: [PATCH 2/3] add download of mac and linux --- README.md | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 18bf9e569..29b2a9c3a 100644 --- a/README.md +++ b/README.md @@ -28,14 +28,22 @@ logkit本身支持多种数据源,并且可以同时发送多个数据源的 1. 下载&解压logkit工具 +**Linux 版本** + +``` +wget http://op26gaeek.bkt.clouddn.com/logkit.tar.gz && tar xvf logkit.tar.gz && cd _package_linux64/ +``` + +**MacOS 版本** + ``` -wget http://op26gaeek.bkt.clouddn.com/logkit.tar.gz && tar xvf logkit.tar.gz +wget http://op26gaeek.bkt.clouddn.com/logkit_mac.tar.gz && tar xvf logkit_mac.tar.gz && cd _package_mac/ ``` 2. 修改runner的配置 ``` -打开 _package/confs/default.conf +打开 confs/default.conf ``` 按照图示进行修改 @@ -44,7 +52,7 @@ wget http://op26gaeek.bkt.clouddn.com/logkit.tar.gz && tar xvf logkit.tar.gz 3. 启动logkit工具 ``` -cd _package && ./logkit -f logkit.conf +./logkit -f logkit.conf ``` logkit.conf是logkit工具本身的配置文件,主要用于指定logkit运行时需要的资源和各个runner配置文件的具体路径。 From da98232d977f2630df7082f7927b12c4b4ecd701 Mon Sep 17 00:00:00 2001 From: wonderflow Date: Tue, 6 Jun 2017 11:22:18 +0800 Subject: [PATCH 3/3] fix logkit hang without conf --- logkit.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/logkit.go b/logkit.go index 777fe6f92..4e43c12b7 100644 --- a/logkit.go +++ b/logkit.go @@ -126,6 +126,7 @@ func main() { log.Fatalf("watch path error %v", err) } stopClean := make(chan struct{}, 0) + defer close(stopClean) if conf.CleanSelfLog { go loopCleanLogkitLog(conf.CleanSelfDir, conf.CleanSelfPattern, conf.CleanSelfLogCnt, stopClean) } @@ -137,7 +138,9 @@ func main() { utils.WaitForInterrupt(func() { rs.Stop() - stopClean <- struct{}{} + if conf.CleanSelfLog { + stopClean <- struct{}{} + } m.Stop() }) }