github.com/coincircle/mattermost-server@v4.8.1-0.20180321182714-9d701c704416+incompatible/utils/redirect_std_log.go (about) 1 // Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved. 2 // See License.txt for license information. 3 4 package utils 5 6 import ( 7 "bufio" 8 "log" 9 "os" 10 "strings" 11 12 l4g "github.com/alecthomas/log4go" 13 ) 14 15 type RedirectStdLog struct { 16 reader *os.File 17 writer *os.File 18 system string 19 ignoreDebug bool 20 } 21 22 func NewRedirectStdLog(system string, ignoreDebug bool) *log.Logger { 23 r, w, _ := os.Pipe() 24 logger := &RedirectStdLog{ 25 reader: r, 26 writer: w, 27 system: system, 28 ignoreDebug: ignoreDebug, 29 } 30 31 go func(l *RedirectStdLog) { 32 scanner := bufio.NewScanner(l.reader) 33 for scanner.Scan() { 34 line := scanner.Text() 35 36 if strings.Index(line, "[DEBUG]") == 0 { 37 if !ignoreDebug { 38 l4g.Debug("%v%v", system, line[7:]) 39 } 40 } else if strings.Index(line, "[DEBG]") == 0 { 41 if !ignoreDebug { 42 l4g.Debug("%v%v", system, line[6:]) 43 } 44 } else if strings.Index(line, "[WARN]") == 0 { 45 l4g.Info("%v%v", system, line[6:]) 46 } else if strings.Index(line, "[ERROR]") == 0 { 47 l4g.Error("%v%v", system, line[7:]) 48 } else if strings.Index(line, "[EROR]") == 0 { 49 l4g.Error("%v%v", system, line[6:]) 50 } else if strings.Index(line, "[ERR]") == 0 { 51 l4g.Error("%v%v", system, line[5:]) 52 } else if strings.Index(line, "[INFO]") == 0 { 53 l4g.Info("%v%v", system, line[6:]) 54 } else { 55 l4g.Info("%v %v", system, line) 56 } 57 } 58 }(logger) 59 60 return log.New(logger.writer, "", 0) 61 } 62 63 func (l *RedirectStdLog) Write(p []byte) (n int, err error) { 64 return l.writer.Write(p) 65 }