func (l Log) Print(outputFormat OutputFormat) (string, error) {
	switch outputFormat {
	case OutputFormatText:
		return l.textLog()
	case OutputFormatJSON:
		return l.jsonOutput()
	default:
		return "", fmt.Errorf("unsupported output format type: %s", outputFormat)
	}
}
Print produces the log output based on the specified format
package terminal
import (
	"encoding/json"
	"fmt"
	"time"
	"github.com/iancoleman/orderedmap"
)
type LogLevel string
const (
	LogLevelInfo  LogLevel = "info"
	LogLevelError LogLevel = "error"
	LogLevelWarn  LogLevel = "warn"
	LogLevelDebug LogLevel = "debug"
)
type LogData interface {
	Message() (string, error)
	Payload() ([]string, map[string]interface{}, error)
}
type Log struct {
	Level LogLevel
	Time  time.Time
	Data  LogData
}
func NewDebugLog(format string, args ...interface{}) Log {
	return newLog(LogLevelDebug, newTextMessage(format, args...))
}
func NewTextLog(format string, args ...interface{}) Log {
	return newLog(LogLevelInfo, newTextMessage(format, args...))
}
func NewJSONLog(message string, data interface{}) Log {
	return newLog(LogLevelInfo, jsonDocument{message, data})
}
func NewTableLog(message string, headers []string, data ...map[string]interface{}) Log {
	return newLog(LogLevelInfo, newTable(message, headers, data))
}
func NewListLog(message string, data ...interface{}) Log {
	return newLog(LogLevelInfo, newList(message, data, false))
}
func NewErrorLog(err error) Log {
	return newLog(LogLevelError, errorMessage{err})
}
func NewWarningLog(format string, args ...interface{}) Log {
	return newLog(LogLevelWarn, newTextMessage(format, args...))
}
func NewFollowupLog(message string, items ...interface{}) Log {
	return newLog(LogLevelDebug, newList(message, items, true))
}
const (
	MsgReferenceLinks string = "For more information"
	MsgSuggestions    string = "Try instead"
)
func newLog(level LogLevel, data LogData) Log {
	return Log{level, time.Now(), data}
}