github.com/cnotch/ipchub@v1.1.0/config/log.go (about) 1 // Copyright (c) 2019,CAOHONGJU All rights reserved. 2 // Use of this source code is governed by a MIT-style 3 // license that can be found in the LICENSE file. 4 5 package config 6 7 import ( 8 "flag" 9 "os" 10 11 "github.com/cnotch/xlog" 12 lumberjack "gopkg.in/natefinch/lumberjack.v2" 13 ) 14 15 // LogConfig 日志配置 16 type LogConfig struct { 17 // Level 是否启动记录调试日志 18 Level xlog.Level `json:"level"` 19 20 // ToFile 是否将日志记录到文件 21 ToFile bool `json:"tofile"` 22 23 // Filename 日志文件名称 24 Filename string `json:"filename"` 25 26 // MaxSize 日志文件的最大尺寸,以兆为单位 27 MaxSize int `json:"maxsize"` 28 29 // MaxDays 旧日志最多保存多少天 30 MaxDays int `json:"maxdays"` 31 32 // MaxBackups 旧日志最多保持数量。 33 // 注意:旧日志保存的条件包括 <=MaxAge && <=MaxBackups 34 MaxBackups int `json:"maxbackups"` 35 36 // Compress 是否用 gzip 压缩 37 Compress bool `json:"compress"` 38 } 39 40 func (c *LogConfig) initFlags() { 41 // 日志配置的 Flag 42 flag.Var(&c.Level, "log-level", 43 "Set the log level to output") 44 flag.BoolVar(&c.ToFile, "log-tofile", false, 45 "Determines if logs should be saved to file") 46 flag.StringVar(&c.Filename, "log-filename", 47 "./logs/"+Name+".log", "Set the file to write logs to") 48 flag.IntVar(&c.MaxSize, "log-maxsize", 20, 49 "Set the maximum size in megabytes of the log file before it gets rotated") 50 flag.IntVar(&c.MaxDays, "log-maxdays", 7, 51 "Set the maximum days of old log files to retain") 52 flag.IntVar(&c.MaxBackups, "log-maxbackups", 14, 53 "Set the maximum number of old log files to retain") 54 flag.BoolVar(&c.Compress, "log-compress", false, 55 "Determines if the log files should be compressed") 56 } 57 58 // 初始化跟日志 59 func (c *LogConfig) initLogger() { 60 if c.ToFile { 61 // 文件输出 62 fileWriter := &lumberjack.Logger{ 63 Filename: c.Filename, // 日志文件路径 64 MaxSize: c.MaxSize, // 每个日志文件保存的最大尺寸 单位:M 65 MaxBackups: c.MaxBackups, // 日志文件最多保存多少个备份 66 MaxAge: c.MaxDays, // 文件最多保存多少天 67 LocalTime: true, // 使用本地时间 68 Compress: c.Compress, // 日志压缩 69 } 70 71 xlog.ReplaceGlobal( 72 xlog.New(xlog.NewTee(xlog.NewCore(xlog.NewConsoleEncoder(xlog.LstdFlags|xlog.Lmicroseconds|xlog.Llongfile), xlog.Lock(os.Stderr), c.Level), 73 xlog.NewCore(xlog.NewJSONEncoder(xlog.Llongfile), fileWriter, c.Level)), 74 xlog.AddCaller())) 75 } else { 76 xlog.ReplaceGlobal( 77 xlog.New(xlog.NewCore(xlog.NewConsoleEncoder(xlog.LstdFlags|xlog.Lmicroseconds|xlog.Llongfile), xlog.Lock(os.Stderr), c.Level), 78 xlog.AddCaller())) 79 } 80 }