Files
scroll/common/utils/logger.go
2022-10-19 21:01:35 +08:00

51 lines
1.3 KiB
Go

package utils
import (
"io"
"os"
"path/filepath"
"github.com/mattn/go-colorable"
"github.com/mattn/go-isatty"
"github.com/scroll-tech/go-ethereum/cmd/utils"
"github.com/scroll-tech/go-ethereum/log"
)
// LogConfig is for setup log types of the logger
type LogConfig struct {
LogFile string
LogJSONFormat bool
LogDebug bool
Verbosity int
}
// Setup is for setup logger
func Setup(cfg *LogConfig) error {
var ostream log.Handler
if logFile := cfg.LogFile; len(logFile) > 0 {
fp, err := os.OpenFile(filepath.Clean(logFile), os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0600)
if err != nil {
utils.Fatalf("Failed to open log file", "err", err)
}
if cfg.LogJSONFormat {
ostream = log.StreamHandler(io.Writer(fp), log.JSONFormat())
} else {
ostream = log.StreamHandler(io.Writer(fp), log.TerminalFormat(true))
}
} else {
output := io.Writer(os.Stderr)
usecolor := (isatty.IsTerminal(os.Stderr.Fd()) || isatty.IsCygwinTerminal(os.Stderr.Fd())) && os.Getenv("TERM") != "dumb"
if usecolor {
output = colorable.NewColorableStderr()
}
ostream = log.StreamHandler(output, log.TerminalFormat(usecolor))
}
// show the call file and line number
log.PrintOrigins(cfg.LogDebug)
glogger := log.NewGlogHandler(ostream)
// Set log level
glogger.Verbosity(log.Lvl(cfg.Verbosity))
log.Root().SetHandler(glogger)
return nil
}