add zap logger

This commit is contained in:
zhiqiang feng
2020-12-28 15:58:00 +08:00
parent c06ec0a519
commit 0619229ec5
10 changed files with 82 additions and 49 deletions
View File
+35 -16
View File
@@ -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
View File
@@ -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
View File
@@ -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)
+2
View File
@@ -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
+5
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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)
}