Skip to content

Commit

Permalink
refactor: refactoring generate log file name
Browse files Browse the repository at this point in the history
  • Loading branch information
fitzix committed Feb 23, 2018
1 parent 738ef3e commit a03c042
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 43 deletions.
4 changes: 2 additions & 2 deletions server.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,13 +46,13 @@ func main() {

App.Action = func(c *cli.Context) error {
if _, err := os.Stat(configPath); os.IsNotExist(err) {
log.WithError(err).Error("未找到配置文件,请先使用init方法生成配置文件")
log.WithError(err).Error(color.RedString("未找到配置文件,请先使用init方法生成配置文件"))
return cli.NewExitError("", 1)
}
log.Infof(bold.Sprint("开始解析配置文件"))
ServerConf := &reader.ServerConf
if _, err := toml.DecodeFile(configPath, ServerConf); err != nil {
log.WithError(err).Error("解析配置文件失败,请检查配置文件格式")
log.WithError(err).Error(color.RedString("解析配置文件失败,请检查配置文件格式"))
return cli.NewExitError("", 1)
}
reader.Start()
Expand Down
75 changes: 45 additions & 30 deletions server/reader/reader.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,51 +12,48 @@ import (
"github.com/apex/log"
"github.com/fatih/color"
"github.com/fitzix/go-udp/server/models"
"github.com/fitzix/go-udp/server/utils"
"github.com/fitzix/go-udp/server/sender"
)

var (
ServerConf models.UdpConf
master sender.Master
)

type Reader struct {
conn *net.UDPConn //UDP连接
logs chan string //日志消息
files map[string]*os.File //用于保存当前已打开的日志文件 file descriptor
conn *net.UDPConn //UDP连接
logs chan string //日志消息
//files map[string]*os.File //用于保存当前已打开的日志文件 file descriptor
file *os.File
}

func (reader *Reader) WriteLog(log, filePath string) error {
if !strings.HasSuffix(filePath, "/") {
filePath += "/"
}
filename := filePath + utils.TimeIntervalFileName(ServerConf.Reader.Interval) + ".log"
reader.WriteContent(filename, log)
func (reader *Reader) WriteLog(log string) error {
reader.WriteContent(log)
return nil
}

// 向文件内写数据
func (reader *Reader) WriteContent(filename, content string) {
if _, ok := reader.files[filename]; !ok {
func (reader *Reader) WriteContent(content string) {
if reader.file == nil{
err := errors.New("")
reader.files[filename], err = os.OpenFile(filename, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0644)
if err != nil {
fmt.Println(err)
reader.file,err = os.OpenFile(ServerConf.LogDir + strconv.Itoa(int(time.Now().Unix())) + ".log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0644)
if err != nil{
log.WithError(err).Error(color.RedString("创建日志文件失败"))
}
//关闭文件,删除file descriptor
go func() {
select {
case <-time.After(time.Duration(ServerConf.Reader.Interval) * time.Minute):
reader.files[filename].Close()
delete(reader.files, filename)
reader.file.Close()
reader.file = nil
}
}()
}
file := reader.files[filename]
if ServerConf.Reader.AutoNewline{
file.WriteString(content + "\n")
return

if ServerConf.Reader.AutoNewline {
reader.file.WriteString(content + "\n")
return
}
file.WriteString(content)
reader.file.WriteString(content)
}

// 读取日志并放入channel
Expand All @@ -74,18 +71,27 @@ func (reader *Reader) ReadLog() {
}

// 收取日志
func (reader *Reader) HandleLog(filePath string) {
for {
rec := <-reader.logs
reader.WriteLog(rec, filePath)
func (reader *Reader) HandleLog() {
if ServerConf.Sender.Enabled {
for {
rec := <-reader.logs
master.Request <- rec
reader.WriteLog(rec)
}
} else {
for {
rec := <-reader.logs
reader.WriteLog(rec)
}
}
}

func Start() {
var s Reader
s.logs = make(chan string, ServerConf.Reader.ReadChan)

s.files = make(map[string]*os.File, 5)
//s.files = make(map[string]*os.File, 1)
s.file = nil
udpAddr, err := net.ResolveUDPAddr("udp4", ":"+strconv.Itoa(ServerConf.Port))
s.conn, err = net.ListenUDP("udp4", udpAddr)
if err != nil {
Expand All @@ -96,13 +102,22 @@ func Start() {
} else {
s.conn.SetReadBuffer(ServerConf.Reader.ReadBuffer)
}
if !strings.HasSuffix(ServerConf.LogDir, "/") {
ServerConf.LogDir += "/"
}

log.Infof(color.CyanString("开始监听%s", s.conn.LocalAddr()))

defer s.conn.Close()

go s.HandleLog(ServerConf.LogDir)
if ServerConf.Sender.Enabled {
master = sender.NewMaster(ServerConf.Sender)
go master.HandleSenderLog()
}

go s.HandleLog()

for {
s.ReadLog()
}
}
}
13 changes: 2 additions & 11 deletions server/utils/timer.go
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package utils

import (
"time"
"strconv"
"fmt"
"log"
"strconv"
"time"
)

func TimeIntervalFileName(interval int) string {
Expand Down Expand Up @@ -36,12 +36,3 @@ func TimeIntervalFileName(interval int) string {
suffix := fmt.Sprintf("%02d", day/interval*interval)
return time.Unix(t, 0).Format("200601") + suffix + "0000"
}

func GetTimeInterval(interval int) int {
if interval < 60 {
return interval
} else if interval < 1440 {
return interval / 60 * 60
}
return interval / 1440 * 1440
}

0 comments on commit a03c042

Please sign in to comment.