// console-log.go package logimpl import ( "fmt" "os" "portale-stac.it/packages/logger" "portale-stac.it/packages/utils" ) // Implementation specific properties const ( CONSOLE_LOG_VERBOSE_ENABLE = iota + FULL_LOGGER_DERIVED_BASE_ID CONSOLE_LOG_TTY // read-only CONSOLE_LOG_DERIVED_BASE_ID ) type consoleLog struct { logImpl TTY utils.TTYContext verboseEnabled bool } func NewConsoleLog(filePath string, maxLevel int) logger.VerboseLogger { log := &consoleLog{ logImpl: logImpl{}, verboseEnabled: true, } log.logImpl.initLogger(filePath, maxLevel, true) log.TTY.Init() return log } func (log *consoleLog) SetProperty(propertyId int, value any) (success bool) { var boolValue bool switch propertyId { case CONSOLE_LOG_VERBOSE_ENABLE: if boolValue, success = value.(bool); success { log.verboseEnabled = boolValue } default: success = log.logImpl.SetProperty(propertyId, value) } return } func (log *consoleLog) GetProperty(propertyId int) (value any) { switch propertyId { case CONSOLE_LOG_VERBOSE_ENABLE: value = log.verboseEnabled case CONSOLE_LOG_TTY: value = &log.TTY default: value = log.logImpl.GetProperty(propertyId) } return } func (log *consoleLog) Msgf(color uint, templ string, args ...any) { if log.TTY.IsTTY(utils.STDERR) { var extTempl string if color != utils.NONE { c := log.TTY.FgColor(utils.STDERR, color) extTempl = c + templ + log.TTY.Reset(utils.STDERR) } if len(extTempl) > 0 { fmt.Fprintf(os.Stderr, extTempl+"\n", args...) } else { fmt.Fprintf(os.Stderr, templ+"\n", args...) // os.Stderr.Sync() } } } func (log *consoleLog) MsgItalicf(color uint, templ string, args ...any) { var extTempl string if log.TTY.IsTTY(utils.STDERR) { if color != utils.NONE { c := log.TTY.FgColor(utils.STDERR, color) extTempl = c + log.TTY.Italic(utils.STDERR) + templ + log.TTY.Reset(utils.STDERR) } else { extTempl = log.TTY.Italic(utils.STDERR) + templ + log.TTY.Reset(utils.STDERR) } } if len(extTempl) > 0 { fmt.Fprintf(os.Stderr, extTempl+"\n", args...) } else { fmt.Fprintf(os.Stderr, templ+"\n", args...) // os.Stderr.Sync() } } func (log *consoleLog) Alertf(prefix string, upstack int, templ string, args ...any) (text string) { var extTempl string if log.TTY.IsTTY(utils.STDERR) { var color string = log.TTY.RedFg(utils.STDERR) if prefix == "" { extTempl = color + templ + log.TTY.Reset(utils.STDERR) } else { extTempl = color + log.TTY.Bold(utils.STDERR) + prefix + log.TTY.BoldOff(utils.STDERR) + templ + log.TTY.Reset(utils.STDERR) } } if len(extTempl) > 0 { fmt.Fprintf(os.Stderr, extTempl+"\n", args...) } else { fmt.Fprintf(os.Stderr, templ+"\n", args...) // os.Stderr.Sync() } text = log.logImpl.Logf(LOG_ERROR, 1+upstack, templ, args...) return } func (log *consoleLog) Verbosef(color uint, templ string, args ...any) string { if log.verboseEnabled { log.Msgf(color, templ, args...) } return log.Logf(LOG_INFO, 2, templ, args...) } func (log *consoleLog) VerboseItalicf(color uint, templ string, args ...any) string { if log.verboseEnabled { log.MsgItalicf(color, templ, args...) } return log.Logf(LOG_INFO, 2, templ, args...) } func (log *consoleLog) VerboseNoColorf(templ string, args ...any) string { return log.Verbosef(utils.NONE, templ, args...) } func (log *consoleLog) VerboseRedf(templ string, args ...any) string { return log.Verbosef(utils.RED, templ, args...) } func (log *consoleLog) VerboseGreenf(templ string, args ...any) string { return log.Verbosef(utils.GREEN, templ, args...) } func (log *consoleLog) VerboseBluef(templ string, args ...any) string { return log.Verbosef(utils.BLUE, templ, args...) } func (log *consoleLog) VerboseBrownf(templ string, args ...any) string { return log.VerboseItalicf(utils.BROWN, templ, args...) }