logimpl/console-log.go

153 lines
3.9 KiB
Go

// Copyright (c) 2024 Celestino Amoroso (celestino.amoroso@gmail.com).
// All rights reserved.
// console-log.go
package logimpl
import (
"fmt"
"os"
"git.portale-stac.it/go-pkg/logger"
"git.portale-stac.it/go-pkg/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...)
}