36 lines
612 B
Go
36 lines
612 B
Go
|
package log
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"io"
|
||
|
"os"
|
||
|
"regexp"
|
||
|
)
|
||
|
|
||
|
// FileTee can write logs to a file on disk as well as standard output.
|
||
|
type FileTee struct {
|
||
|
fh io.Writer
|
||
|
}
|
||
|
|
||
|
var RegexpANSIColorCode = regexp.MustCompile(`\x1B\[[0-9;]+m`)
|
||
|
|
||
|
func NewFileTee(filename string) (*FileTee, error) {
|
||
|
fh, err := os.Create(filename)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
return &FileTee{
|
||
|
fh: fh,
|
||
|
}, nil
|
||
|
}
|
||
|
|
||
|
func (ft *FileTee) Write(p []byte) (n int, err error) {
|
||
|
var (
|
||
|
text = string(p)
|
||
|
noColor = RegexpANSIColorCode.ReplaceAllString(text, "")
|
||
|
)
|
||
|
fmt.Fprintf(os.Stdout, string(p))
|
||
|
return fmt.Fprintf(ft.fh, noColor)
|
||
|
}
|