aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--logger.go92
-rw-r--r--main.go22
2 files changed, 106 insertions, 8 deletions
diff --git a/logger.go b/logger.go
new file mode 100644
index 0000000..1fcbfeb
--- /dev/null
+++ b/logger.go
@@ -0,0 +1,92 @@
+package main
+
+import (
+ "fmt"
+ "log"
+)
+
+type LevelEnum uint8
+
+const (
+ None LevelEnum = iota
+ Error
+ Warn
+ Info
+ Debug
+)
+
+type levelInfo struct {
+ abbrev string
+ color string
+}
+
+var (
+ levelInfos = map[LevelEnum]levelInfo{
+ Error: {"ERR", ansiRed},
+ Warn: {"WARN", ansiYellow},
+ Info: {"INFO", ansiCyan},
+ Debug: {"DEBUG", ansiGreen},
+ }
+)
+
+func (s LevelEnum) Info() levelInfo {
+ info, ok := levelInfos[s]
+ if !ok {
+ return levelInfo{"UNK", ansiWhite}
+ }
+ return info
+}
+
+func (s LevelEnum) Format() string {
+ info := s.Info()
+ return colorize("["+info.abbrev+"]", info.color)
+}
+
+type Logger struct {
+ Level LevelEnum
+
+ ns string
+}
+
+func NewLogger(level LevelEnum) *Logger {
+ return &Logger{
+ Level: level,
+ }
+}
+
+func (l *Logger) WithNS(ns string) *Logger {
+ return &Logger{
+ Level: l.Level,
+ ns: formatNS(ns),
+ }
+}
+
+func (l *Logger) Logf(level LevelEnum, format string, args ...any) {
+ if level > l.Level {
+ return
+ }
+ log.Printf("%s%s %s", l.ns, level.Format(), fmt.Sprintf(format, args...))
+}
+
+func (l *Logger) Errorf(format string, args ...any) { l.Logf(Error, format, args...) }
+func (l *Logger) Warnf(format string, args ...any) { l.Logf(Warn, format, args...) }
+func (l *Logger) Infof(format string, args ...any) { l.Logf(Info, format, args...) }
+func (l *Logger) Debugf(format string, args ...any) { l.Logf(Debug, format, args...) }
+
+func formatNS(ns string) string {
+ return colorize("["+ns+"]", ansiPurple)
+}
+
+var ansiReset = "\033[0m"
+var ansiRed = "\033[31m"
+var ansiGreen = "\033[32m"
+var ansiYellow = "\033[33m"
+var ansiBlue = "\033[34m"
+var ansiPurple = "\033[35m"
+var ansiCyan = "\033[36m"
+var ansiGray = "\033[37m"
+var ansiWhite = "\033[97m"
+
+func colorize(s string, color string) string {
+ return color + s + ansiReset
+}
diff --git a/main.go b/main.go
index a72bb5b..7340795 100644
--- a/main.go
+++ b/main.go
@@ -18,20 +18,29 @@ func main() {
flag.BoolVarP(&concatenate, "concatenate", "c", false, "concatenate tar archives")
flag.Parse()
- if err := process(prefix, concatenate, verbose); err != nil {
+ logger := NewLogger(LevelEnum(verbose) + 2)
+ params := processParams{
+ prefix: prefix,
+ concatenate: concatenate,
+ }
+ if err := process(params, logger); err != nil {
log.Fatal(err)
}
+}
+type processParams struct {
+ prefix string
+ concatenate bool
}
-func process(prefix string, concatenate bool, verbose int) error {
+func process(params processParams, logger *Logger) error {
tr := tar.NewReader(os.Stdin)
tw := tar.NewWriter(os.Stdout)
defer tw.Close()
for {
hdr, err := tr.Next()
if err == io.EOF {
- if !concatenate {
+ if params.concatenate {
tr = tar.NewReader(os.Stdin)
hdr, err = tr.Next()
if err == io.EOF {
@@ -46,11 +55,8 @@ func process(prefix string, concatenate bool, verbose int) error {
return err
}
- if verbose >= 1 {
- log.Printf("file: %s", hdr.Name)
- }
-
- hdr.Name = prefix + hdr.Name
+ logger.Infof(`TarEntry.name = %s`, hdr.Name)
+ hdr.Name = params.prefix + hdr.Name
if err = tw.WriteHeader(hdr); err != nil {
return err