153 lines
3.9 KiB
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...)
|
|
}
|