Compare commits

...

3 Commits
v1.1.0 ... main

Author SHA1 Message Date
jolheiser 8af49ac71f Print to stderr by default 2021-06-21 21:47:43 +00:00
John Olheiser 0b1a1e4bd0 Time format (#5)
Co-authored-by: jolheiser <john.olheiser@gmail.com>
Reviewed-on: https://gitea.com/jolheiser/beaver/pulls/5
Co-authored-by: John Olheiser <john.olheiser@gmail.com>
Co-committed-by: John Olheiser <john.olheiser@gmail.com>
2021-02-17 13:58:17 +08:00
John Olheiser 262effd971 Fix legacy code (#4)
Co-authored-by: jolheiser <john.olheiser@gmail.com>
Reviewed-on: https://gitea.com/jolheiser/beaver/pulls/4
Co-authored-by: John Olheiser <john.olheiser@gmail.com>
Co-committed-by: John Olheiser <john.olheiser@gmail.com>
2021-02-17 13:40:21 +08:00
8 changed files with 42 additions and 38 deletions

View File

@ -82,9 +82,15 @@ func (b *Basic) unformat() string {
return fmt.Sprintf("%s[%dm", escape, Reset)
}
// Format returns a string wrapped in the basic color
func (b *Basic) Format(text string) string {
if len(b.Attrs) > 0 {
return b.wrap(text)
}
return text
}
// Formatf returns a formatted string wrapped in the basic color
func (b *Basic) Formatf(format string, v ...interface{}) string {
return b.Format(fmt.Sprintf(format, v...))
}

View File

@ -47,3 +47,24 @@ const (
BgHiCyan
BgHiWhite
)
var attrCache = make(map[BasicAttribute]*Basic)
func attr(a BasicAttribute) *Basic {
if c, ok := attrCache[a]; ok {
return c
}
c := New(a)
attrCache[a] = c
return c
}
// Format is a quick way to format a string using a single attribute
func (a BasicAttribute) Format(text string) string {
return attr(a).Format(text)
}
// Format is a quick way to format a formatted string using a single attribute
func (a BasicAttribute) Formatf(text string, v ...interface{}) string {
return attr(a).Formatf(text, v...)
}

View File

@ -8,6 +8,7 @@ const escape = "\x1b"
type Color interface {
Format(text string) string
Formatf(text string, v ...interface{}) string
}
// ParseLevel parses a string and returns a Beaver Level's Color, defaulting to Info

View File

@ -43,6 +43,12 @@ func (e *Extended) unformat() string {
return fmt.Sprintf("%s[%dm", escape, Reset)
}
// Format returns a string wrapped in the extended color
func (e *Extended) Format(text string) string {
return e.wrap(text)
}
// Formatf returns a formatted string wrapped in the extended color
func (e *Extended) Formatf(text string, v ...interface{}) string {
return e.wrap(fmt.Sprintf(text, v...))
}

View File

@ -40,6 +40,12 @@ func (t *True) unformat() string {
return fmt.Sprintf("%s[%dm", escape, Reset)
}
// Format returns a string wrapped in the true color
func (t *True) Format(text string) string {
return t.wrap(text)
}
// Formatf returns a formatted string wrapped in the true color
func (t *True) Formatf(text string, v ...interface{}) string {
return t.wrap(fmt.Sprintf(text, v...))
}

View File

@ -6,7 +6,7 @@ import (
var (
Console = &Logger{
Writer: os.Stdout,
Writer: os.Stderr,
Level: INFO,
Format: FormatOptions{
MessageColor: true,

View File

@ -3,7 +3,6 @@ package beaver
import (
"fmt"
"strings"
"time"
"go.jolheiser.com/beaver/color"
)
@ -105,38 +104,3 @@ func ParseLevel(level string) Level {
}
return INFO
}
func timePrefix(t time.Time) string {
var buf = &[]byte{}
year, month, day := t.Date()
itoa(buf, int(month), 2)
*buf = append(*buf, '/')
itoa(buf, day, 2)
*buf = append(*buf, '/')
itoa(buf, year, 4)
*buf = append(*buf, ' ')
hour, min, sec := t.Clock()
itoa(buf, hour, 2)
*buf = append(*buf, ':')
itoa(buf, min, 2)
*buf = append(*buf, ':')
itoa(buf, sec, 2)
return string(*buf)
}
func itoa(buf *[]byte, i int, wid int) {
var b [20]byte
bp := len(b) - 1
for i >= 10 || wid > 1 {
wid--
q := i / 10
b[bp] = byte('0' + i - q*10)
bp--
i = q
}
// i < 10
b[bp] = byte('0' + i)
*buf = append(*buf, b[bp:]...)
}

View File

@ -42,7 +42,7 @@ func (l *Logger) write(level Level, text string) {
if l.Level <= level {
var message string
if l.Format.TimePrefix {
message += color.Time.Format(timePrefix(time.Now())) + " "
message += color.Time.Format(time.Now().Format("01/02/2006 15:04:05")) + " "
}
if l.Format.StackPrefix {
_, file, line, _ := runtime.Caller(l.skip)