123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- package types
- import (
- "bufio"
- "bytes"
- "encoding/gob"
- "fmt"
- "os"
- "strconv"
- "strings"
- "time"
- log "github.com/sirupsen/logrus"
- "gopkg.in/natefinch/lumberjack.v2"
- )
- var logFormatter log.Formatter
- var LogOutput *lumberjack.Logger //io.Writer
- var logLevel log.Level
- func SetDefaultLoggerConfig(cfgMode string, cfgFolder string, cfgLevel log.Level, maxSize int, maxFiles int, maxAge int, compress *bool, forceColors bool) error {
- /*Configure logs*/
- if cfgMode == "file" {
- _maxsize := 500
- if maxSize != 0 {
- _maxsize = maxSize
- }
- _maxfiles := 3
- if maxFiles != 0 {
- _maxfiles = maxFiles
- }
- _maxage := 28
- if maxAge != 0 {
- _maxage = maxAge
- }
- _compress := true
- if compress != nil {
- _compress = *compress
- }
- LogOutput = &lumberjack.Logger{
- Filename: filepath.Join(cfgFolder, "crowdsec.log"),
- MaxSize: _maxsize,
- MaxBackups: _maxfiles,
- MaxAge: _maxage,
- Compress: _compress,
- }
- log.SetOutput(LogOutput)
- } else if cfgMode != "stdout" {
- return fmt.Errorf("log mode '%s' unknown", cfgMode)
- }
- logLevel = cfgLevel
- log.SetLevel(logLevel)
- logFormatter = &log.TextFormatter{TimestampFormat: "02-01-2006 15:04:05", FullTimestamp: true, ForceColors: forceColors}
- log.SetFormatter(logFormatter)
- return nil
- }
- func ConfigureLogger(clog *log.Logger) error {
- /*Configure logs*/
- if LogOutput != nil {
- clog.SetOutput(LogOutput)
- }
- if logFormatter != nil {
- clog.SetFormatter(logFormatter)
- }
- clog.SetLevel(logLevel)
- return nil
- }
- func Clone(a, b interface{}) error {
- buff := new(bytes.Buffer)
- enc := gob.NewEncoder(buff)
- dec := gob.NewDecoder(buff)
- if err := enc.Encode(a); err != nil {
- return fmt.Errorf("failed cloning %T", a)
- }
- if err := dec.Decode(b); err != nil {
- return fmt.Errorf("failed cloning %T", b)
- }
- return nil
- }
- func ParseDuration(d string) (time.Duration, error) {
- durationStr := d
- if strings.HasSuffix(d, "d") {
- days := strings.Split(d, "d")[0]
- if len(days) == 0 {
- return 0, fmt.Errorf("'%s' can't be parsed as duration", d)
- }
- daysInt, err := strconv.Atoi(days)
- if err != nil {
- return 0, err
- }
- durationStr = strconv.Itoa(daysInt*24) + "h"
- }
- duration, err := time.ParseDuration(durationStr)
- if err != nil {
- return 0, err
- }
- return duration, nil
- }
- func UtcNow() time.Time {
- return time.Now().UTC()
- }
- func GetLineCountForFile(filepath string) int {
- f, err := os.Open(filepath)
- if err != nil {
- log.Fatalf("unable to open log file %s : %s", filepath, err)
- }
- defer f.Close()
- lc := 0
- fs := bufio.NewScanner(f)
- for fs.Scan() {
- lc++
- }
- return lc
- }
|