github.com/psyb0t/mattermost-server@v4.6.1-0.20180125161845-5503a1351abf+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  }