File tree Expand file tree Collapse file tree 2 files changed +79
-0
lines changed Expand file tree Collapse file tree 2 files changed +79
-0
lines changed Original file line number Diff line number Diff line change 1+ DB_HOST = localhost
2+ DB_NAME = logs
3+ DB_USER = postgres
4+ DB_PASS = localdbpass
5+
6+ LOG_FILE = ./nginx-logs/test.log
7+
8+ FLUSH_MS = 6000
Original file line number Diff line number Diff line change 1+ package main
2+
3+ import (
4+ "fmt"
5+ "github.com/hpcloud/tail"
6+ "github.com/joho/godotenv"
7+ "log"
8+ "time"
9+ "os"
10+ "strconv"
11+ "os/signal"
12+ "syscall"
13+ )
14+
15+ var logString = make (chan string , 10 )
16+
17+ func storeLogs (logs []string ) {
18+ log .Printf ("Storing %d entries\n " , len (logs ))
19+ for _ , line := range logs {
20+ fmt .Println (line )
21+ }
22+ }
23+
24+ func processLogs () {
25+ lastSync := time .Now ()
26+ now := time .Now ()
27+ buffer := make ([]string , 0 , 100 )
28+ var s string
29+ flushTime , _ := strconv .ParseInt (os .Getenv ("FLUSH_MS" ), 10 , 64 )
30+ for {
31+ s = <- logString
32+ now = time .Now ()
33+ buffer = append (buffer , s )
34+ if (lastSync .Equal (now ) || now .Sub (lastSync ).Milliseconds () >= flushTime ) {
35+ storeLogs (buffer )
36+ buffer = buffer [:0 ]
37+ lastSync = now
38+ }
39+ }
40+ }
41+
42+ func onExit () {
43+ fmt .Print ("goodbye" )
44+ }
45+
46+ func main () {
47+ err := godotenv .Load ()
48+ if err != nil {
49+ log .Fatal ("Error loading .env file" )
50+ }
51+
52+ s := make (chan os.Signal )
53+ signal .Notify (s , os .Interrupt , syscall .SIGTERM )
54+ go func () {
55+ <- s
56+ log .Println ("Exiting" )
57+ os .Exit (0 )
58+ }()
59+
60+ go processLogs ()
61+ t , err := tail .TailFile (os .Getenv ("LOG_FILE" ), tail.Config {
62+ Follow : true ,
63+ ReOpen : true ,
64+ })
65+ if err != nil {
66+ panic (err )
67+ }
68+ for line := range t .Lines {
69+ logString <- line .Text
70+ }
71+ }
You can’t perform that action at this time.
0 commit comments