github.com/esnet/gdg@v0.6.1-0.20240412190737-6b6eba9c14d8/internal/log/log.go (about)

     1  package log
     2  
     3  import (
     4  	"github.com/lmittmann/tint"
     5  	"github.com/mattn/go-isatty"
     6  	"log"
     7  	"log/slog"
     8  	"os"
     9  	"time"
    10  )
    11  
    12  // InitializeAppLogger initialize logger, invoked from main
    13  func InitializeAppLogger(stdout *os.File, stderr *os.File, debug bool) {
    14  	errStream := stderr
    15  	outStream := stdout
    16  	level := slog.LevelInfo
    17  	showSource := false
    18  	if debug {
    19  		level = slog.LevelDebug
    20  		showSource = true
    21  	}
    22  
    23  	opts := &tint.Options{
    24  		Level:      level,
    25  		TimeFormat: time.DateTime,
    26  		AddSource:  showSource,
    27  		NoColor:    !isatty.IsTerminal(outStream.Fd())}
    28  
    29  	//Splits the logging between stdout/stderr as appropriate
    30  	myHandler := NewContextHandler(slog.Default().Handler(), outStream, errStream, opts)
    31  	customSplitStreamLogger := slog.New(myHandler)
    32  	slog.SetDefault(customSplitStreamLogger)
    33  	log.SetOutput(os.Stderr)
    34  
    35  }