add zap logger
This commit is contained in:
+35
-16
@@ -18,9 +18,12 @@ package cmd
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
rotatelogs "github.com/lestrrat-go/file-rotatelogs"
|
||||
"github.com/spf13/cobra"
|
||||
"go.uber.org/zap"
|
||||
"go.uber.org/zap/zapcore"
|
||||
|
||||
"github.com/spf13/viper"
|
||||
"it2000.com.cn/tele-recv/utils"
|
||||
@@ -55,7 +58,7 @@ Read the telegram from `,
|
||||
Mode = os.Getenv(ModeName)
|
||||
|
||||
logger *zap.Logger
|
||||
l *zap.SugaredLogger
|
||||
// l *zap.SugaredLogger
|
||||
)
|
||||
|
||||
// Execute adds all child commands to the root command and sets flags appropriately.
|
||||
@@ -78,14 +81,12 @@ func init() {
|
||||
// Cobra also supports local flags, which will only run
|
||||
// when this action is called directly.
|
||||
rootCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle")
|
||||
if Mode == "PROD" {
|
||||
logger, _ = zap.NewProduction()
|
||||
} else {
|
||||
logger, _ = zap.NewDevelopment()
|
||||
}
|
||||
|
||||
initLog()
|
||||
defer logger.Sync()
|
||||
l = logger.Sugar()
|
||||
utils.Log = l
|
||||
// l = logger.Sugar()
|
||||
utils.Log = logger
|
||||
|
||||
}
|
||||
|
||||
// initConfig reads in config file and ENV variables if set.
|
||||
@@ -94,13 +95,6 @@ func initConfig() {
|
||||
// Use config file from the flag.
|
||||
viper.SetConfigFile(cfgFile)
|
||||
} else {
|
||||
// Find home directory.
|
||||
//home, err := os.Open(".")
|
||||
//if err != nil {
|
||||
// fmt.Println(err)
|
||||
// os.Exit(1)
|
||||
//}
|
||||
|
||||
// Search config in home directory with name ".tele-recv" (without extension).
|
||||
viper.AddConfigPath(".")
|
||||
viper.SetConfigName("telegram")
|
||||
@@ -111,7 +105,7 @@ func initConfig() {
|
||||
// If a config file is found, read it in.
|
||||
if err := viper.ReadInConfig(); err == nil {
|
||||
// fmt.Println("Using config file:", viper.ConfigFileUsed())
|
||||
l.Infof("Using config file : %s", viper.ConfigFileUsed())
|
||||
logger.Info("Using config file ", zap.String("path", viper.ConfigFileUsed()))
|
||||
device = viper.GetString("serial.device")
|
||||
baudrate = viper.GetInt("serial.baudrate")
|
||||
bytesize = byte(viper.GetInt("serial.bytesize"))
|
||||
@@ -123,3 +117,28 @@ func initConfig() {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func initLog() {
|
||||
logFile := "./log/telegram-%Y-%m-%d-%H.log"
|
||||
rotator, err := rotatelogs.New(
|
||||
logFile,
|
||||
rotatelogs.WithMaxAge(60*24*time.Hour),
|
||||
rotatelogs.WithRotationTime(time.Hour))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
priority := zap.LevelEnablerFunc(func(lvl zapcore.Level) bool {
|
||||
return lvl >= zapcore.DebugLevel
|
||||
})
|
||||
|
||||
encoder := zapcore.NewConsoleEncoder(zap.NewDevelopmentEncoderConfig())
|
||||
|
||||
core := zapcore.NewTee(
|
||||
zapcore.NewCore(encoder, zapcore.Lock(os.Stdout), priority),
|
||||
zapcore.NewCore(encoder, zapcore.AddSync(rotator), priority),
|
||||
)
|
||||
|
||||
logger = zap.New(core)
|
||||
|
||||
}
|
||||
|
||||
+9
-7
@@ -16,10 +16,12 @@ limitations under the License.
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
"fmt"
|
||||
|
||||
"go.uber.org/zap"
|
||||
"it2000.com.cn/tele-recv/utils"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
@@ -68,7 +70,7 @@ func start() {
|
||||
// and then notify the program that it can finish.
|
||||
go func() {
|
||||
sig := <-sigs
|
||||
l.Info(sig)
|
||||
logger.Info("got ", zap.Any("signal", sig))
|
||||
utils.ServerRunning = false
|
||||
utils.StopSocketServer()
|
||||
done <- true
|
||||
@@ -77,17 +79,17 @@ func start() {
|
||||
// The program will wait here until it gets the
|
||||
// expected signal (as indicated by the goroutine
|
||||
// above sending a value on `done`) and then exit.
|
||||
l.Info("awaiting signal")
|
||||
logger.Info("awaiting signal")
|
||||
_ = utils.InitDb(dbFile, dbInit)
|
||||
go utils.Listen(socketAddress)
|
||||
for utils.ServerRunning {
|
||||
if !utils.IsPortOpen() {
|
||||
l.Info("try to open port")
|
||||
logger.Info("try to open port")
|
||||
err := utils.OpenPort(device, baudrate, bytesize, stopbits)
|
||||
if err != nil {
|
||||
l.Fatal("error in open serial port ", err)
|
||||
logger.Fatal("error in open serial port ", zap.Error(err))
|
||||
}
|
||||
l.Info("starting read")
|
||||
logger.Info("starting read")
|
||||
}
|
||||
buffer, count := utils.ReadPort()
|
||||
if count > 0 {
|
||||
@@ -98,6 +100,6 @@ func start() {
|
||||
}
|
||||
}
|
||||
<-done
|
||||
l.Info("exiting")
|
||||
logger.Info("exiting")
|
||||
|
||||
}
|
||||
|
||||
+1
-1
@@ -33,7 +33,7 @@ Test load sqlite database and init table`,
|
||||
}
|
||||
|
||||
func test() {
|
||||
l.Info("Testing environment")
|
||||
logger.Info("Testing environment")
|
||||
_ = utils.OpenPort(device, baudrate, bytesize, stopbits)
|
||||
|
||||
err := utils.InitDb(dbFile, dbInit)
|
||||
|
||||
@@ -4,6 +4,8 @@ go 1.15
|
||||
|
||||
require (
|
||||
github.com/fsnotify/fsnotify v1.4.9 // indirect
|
||||
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible
|
||||
github.com/lestrrat-go/strftime v1.0.3 // indirect
|
||||
github.com/magiconair/properties v1.8.4 // indirect
|
||||
github.com/mattn/go-sqlite3 v1.14.5
|
||||
github.com/mitchellh/mapstructure v1.4.0 // indirect
|
||||
|
||||
@@ -113,6 +113,11 @@ github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORN
|
||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||
github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc/go.mod h1:kopuH9ugFRkIXf3YoqHKyrJ9YfUFsckUU9S7B+XP+is=
|
||||
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible h1:Y6sqxHMyB1D2YSzWkLibYKgg+SwmyFU9dF2hn6MdTj4=
|
||||
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible/go.mod h1:ZQnN8lSECaebrkQytbHj4xNgtg8CR7RYXnPok8e0EHA=
|
||||
github.com/lestrrat-go/strftime v1.0.3 h1:qqOPU7y+TM8Y803I8fG9c/DyKG3xH/xkng6keC1015Q=
|
||||
github.com/lestrrat-go/strftime v1.0.3/go.mod h1:E1nN3pCbtMSu1yjSVeyuRFVm/U0xoR76fd03sz+Qz4g=
|
||||
github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4=
|
||||
github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
|
||||
github.com/magiconair/properties v1.8.4 h1:8KGKTcQQGm0Kv7vEbKFErAoAOFyyacLStRtQSeYtvkY=
|
||||
|
||||
+9
-9
@@ -15,18 +15,18 @@ var (
|
||||
stopbits byte
|
||||
port *serial.Port
|
||||
portOpened = false
|
||||
Log *zap.SugaredLogger
|
||||
Log *zap.Logger
|
||||
)
|
||||
|
||||
const readDuration = 500 * time.Millisecond
|
||||
|
||||
// OpenPort open serial port
|
||||
func OpenPort(device string, baudrate int, bytesize byte, stopbits byte) error {
|
||||
Log.Infow("opening serial device ",
|
||||
"port", device,
|
||||
"baudrate", baudrate,
|
||||
"bytesize", bytesize,
|
||||
"stopbits", stopbits)
|
||||
Log.Info("opening serial device ",
|
||||
zap.String("port", device),
|
||||
zap.Int("baudrate", baudrate),
|
||||
zap.Int("bytesize", int(bytesize)),
|
||||
zap.Int("stopbits", int(stopbits)))
|
||||
config := &serial.Config{Name: device,
|
||||
Baud: baudrate,
|
||||
Size: bytesize,
|
||||
@@ -35,10 +35,10 @@ func OpenPort(device string, baudrate int, bytesize byte, stopbits byte) error {
|
||||
var err error
|
||||
port, err = serial.OpenPort(config)
|
||||
if err != nil {
|
||||
Log.Fatal("error in open serial port ", err)
|
||||
Log.Fatal("error in open serial port ", zap.Error(err))
|
||||
return err
|
||||
}
|
||||
Log.Infof("%s opened", device)
|
||||
Log.Info("opened ", zap.String("port", device))
|
||||
portOpened = true
|
||||
return nil
|
||||
}
|
||||
@@ -51,7 +51,7 @@ func ReadPort() ([]byte, int) {
|
||||
}
|
||||
count, err := port.Read(buffer)
|
||||
if err != nil && err != io.EOF {
|
||||
Log.Error("error in read port ", err)
|
||||
Log.Error("error in read port ", zap.Error(err))
|
||||
//TODO: 3 time fail try to
|
||||
}
|
||||
return buffer, count
|
||||
|
||||
+8
-6
@@ -4,6 +4,8 @@ import (
|
||||
"io"
|
||||
"net"
|
||||
"time"
|
||||
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
const ServerType = "tcp"
|
||||
@@ -17,20 +19,20 @@ func Listen(address string) {
|
||||
var err error
|
||||
server, err = net.Listen(ServerType, address)
|
||||
if err != nil {
|
||||
Log.Fatal("error in create server ", err)
|
||||
Log.Fatal("error in create server ", zap.Error(err))
|
||||
}
|
||||
defer server.Close()
|
||||
Log.Infof("listen on %s", address)
|
||||
Log.Info("listen on ", zap.String("address", address))
|
||||
for ServerRunning {
|
||||
conn, err := server.Accept()
|
||||
if err != nil {
|
||||
ServerRunning = false
|
||||
Log.Error("error in create connection ", err)
|
||||
Log.Error("error in create connection ", zap.Error(err))
|
||||
}
|
||||
if client == nil {
|
||||
client = conn
|
||||
ClientReady = false
|
||||
Log.Infof("client %s connected ", client.RemoteAddr())
|
||||
Log.Info("client connected on ", zap.Any("address", client.RemoteAddr()))
|
||||
LoadUnprocessed()
|
||||
} else {
|
||||
Log.Info("client already connected, close")
|
||||
@@ -48,7 +50,7 @@ func Listen(address string) {
|
||||
func WriteToClient(data string) error {
|
||||
_, err := client.Write([]byte(data + "\r\n"))
|
||||
if err != nil {
|
||||
Log.Error("error in write data to client socket ", err)
|
||||
Log.Error("error in write data to client socket ", zap.Error(err))
|
||||
closeClient()
|
||||
}
|
||||
return err
|
||||
@@ -58,7 +60,7 @@ func connCheck() bool {
|
||||
_, err := client.Read(make([]byte, 0))
|
||||
if err != nil && err != io.EOF {
|
||||
// this connection is invalid
|
||||
Log.Error("conn closed....", err)
|
||||
Log.Error("conn closed....", zap.Error(err))
|
||||
client = nil
|
||||
return false
|
||||
}
|
||||
|
||||
+10
-9
@@ -6,6 +6,7 @@ import (
|
||||
"time"
|
||||
|
||||
_ "github.com/mattn/go-sqlite3"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -41,12 +42,12 @@ var (
|
||||
func getDb() *sql.DB {
|
||||
//log.Println("init database ", initTable)
|
||||
if initTable && !initialized {
|
||||
Log.Info("remove database file ", dbFile)
|
||||
Log.Info("remove database ", zap.String("file", dbFile))
|
||||
os.Remove(dbFile)
|
||||
}
|
||||
db, err := sql.Open(DbDriver, dbFile)
|
||||
if err != nil {
|
||||
Log.Fatal("error in open database ", err)
|
||||
Log.Fatal("error in open database ", zap.Error(err))
|
||||
}
|
||||
return db
|
||||
}
|
||||
@@ -59,7 +60,7 @@ func InitDb(file string, init bool) error {
|
||||
defer db.Close()
|
||||
_, dbErr = db.Exec(TableCreate)
|
||||
checkDbErr(dbErr, "error in create table")
|
||||
Log.Infof("database %s initialized", dbFile)
|
||||
Log.Info("database initialized")
|
||||
initialized = true
|
||||
return nil
|
||||
}
|
||||
@@ -82,9 +83,9 @@ func InsertTelegram(teleString string) {
|
||||
checkDbErr(err, "error in insert telegram ")
|
||||
isWriting = false
|
||||
if insertSQL == InsertOld {
|
||||
Log.Infof("telegram [%d] processed ", id)
|
||||
Log.Info("telegram processed ", zap.Int64("id", id))
|
||||
} else {
|
||||
Log.Infof("telegram [%d] saved ", id)
|
||||
Log.Info("telegram saved ", zap.Int64("id", id))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -110,7 +111,7 @@ func LoadUnprocessed() {
|
||||
func getTelegram(db *sql.DB) []telegram {
|
||||
var telegrams []telegram
|
||||
num := countTelegram()
|
||||
Log.Infof("%n telegram unprocessed ", num)
|
||||
Log.Info("telegram ", zap.Int64("unprocessed", num))
|
||||
if num < 1 {
|
||||
return telegrams
|
||||
}
|
||||
@@ -137,7 +138,7 @@ func processed(db *sql.DB, t telegram) {
|
||||
result, err := stmt.Exec(t.id)
|
||||
checkDbErr(err, "error in update telegram status")
|
||||
id, _ := result.RowsAffected()
|
||||
Log.Infof("[%d] telegram update : %t", id, id > 0)
|
||||
Log.Info("telegram update : %t", zap.Int64("id", id), zap.Bool("result", id > 0))
|
||||
isWriting = false
|
||||
Log.Info("release lock")
|
||||
tx.Commit()
|
||||
@@ -156,7 +157,7 @@ func countTelegram() int64 {
|
||||
|
||||
func getWriteLock() {
|
||||
count := 0
|
||||
Log.Debugf("write lock : %t", isWriting)
|
||||
Log.Debug("with ", zap.Bool("lock", isWriting))
|
||||
for isWriting && count < 10 {
|
||||
Log.Info("waiting for write ")
|
||||
time.Sleep(5 * time.Second)
|
||||
@@ -170,6 +171,6 @@ func getWriteLock() {
|
||||
|
||||
func checkDbErr(err error, msg string) {
|
||||
if err != nil {
|
||||
Log.Fatal(msg, err)
|
||||
Log.Fatal(msg, zap.Error(err))
|
||||
}
|
||||
}
|
||||
|
||||
+3
-1
@@ -3,6 +3,8 @@ package utils
|
||||
import (
|
||||
"regexp"
|
||||
"strings"
|
||||
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -27,7 +29,7 @@ func check() {
|
||||
telegram := exp.FindString(string(buffer))
|
||||
|
||||
if len(telegram) > 0 {
|
||||
Log.Infof("telegram : %s", telegram)
|
||||
Log.Info("telegram ", zap.String("text", telegram))
|
||||
buffer = nil
|
||||
InsertTelegram(telegram)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user