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  }