From c1d4acc01e5ab5b2606a101ebbfe4c1dadde697b Mon Sep 17 00:00:00 2001 From: Jason Wilder Date: Sun, 15 Feb 2015 10:48:34 -0700 Subject: [PATCH] CLI: Use colorized console output This extracts some of the colored logging functionality into some convenience functions to log directly to the console (stdout) w/o the usual logging prefixes and flags. It's intended for console messages when using grafana commands. --- pkg/cmd/accounts.go | 15 +++---- pkg/log/console.go | 100 ++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 97 insertions(+), 18 deletions(-) diff --git a/pkg/cmd/accounts.go b/pkg/cmd/accounts.go index a2eea8b6609..e6742da6fbf 100644 --- a/pkg/cmd/accounts.go +++ b/pkg/cmd/accounts.go @@ -47,8 +47,7 @@ func listAccounts(c *cli.Context) { accountsQuery := m.GetAccountsQuery{} if err := bus.Dispatch(&accountsQuery); err != nil { - log.Error(3, "Failed to find accounts", err) - return + log.ConsoleFatalf("Failed to find accounts: %s", err) } w := tabwriter.NewWriter(os.Stdout, 20, 1, 4, ' ', 0) @@ -66,8 +65,7 @@ func createAccount(c *cli.Context) { sqlstore.EnsureAdminUser() if !c.Args().Present() { - fmt.Printf("Account name arg is required\n") - return + log.ConsoleFatal("Account name arg is required") } name := c.Args().First() @@ -75,16 +73,15 @@ func createAccount(c *cli.Context) { adminQuery := m.GetUserByLoginQuery{LoginOrEmail: setting.AdminUser} if err := bus.Dispatch(&adminQuery); err == m.ErrUserNotFound { - log.Error(3, "Failed to find default admin user", err) - return + log.ConsoleFatalf("Failed to find default admin user: %s", err) } adminUser := adminQuery.Result cmd := m.CreateAccountCommand{Name: name, UserId: adminUser.Id} if err := bus.Dispatch(&cmd); err != nil { - log.Error(3, "Failed to create account", err) - return + log.ConsoleFatalf("Failed to create account: %s", err) } - fmt.Printf("Account %s created for admin user %s\n", name, adminUser.Email) + + log.ConsoleInfof("Account %s created for admin user %s\n", name, adminUser.Email) } diff --git a/pkg/log/console.go b/pkg/log/console.go index 44e53e50d75..2a6bbf6a3bb 100644 --- a/pkg/log/console.go +++ b/pkg/log/console.go @@ -6,6 +6,7 @@ package log import ( "encoding/json" + "fmt" "log" "os" "runtime" @@ -21,15 +22,26 @@ func NewBrush(color string) Brush { } } -var colors = []Brush{ - NewBrush("1;36"), // Trace cyan - NewBrush("1;34"), // Debug blue - NewBrush("1;32"), // Info green - NewBrush("1;33"), // Warn yellow - NewBrush("1;31"), // Error red - NewBrush("1;35"), // Critical purple - NewBrush("1;31"), // Fatal red -} +var ( + Red = NewBrush("1;31") + Purple = NewBrush("1;35") + Yellow = NewBrush("1;33") + Green = NewBrush("1;32") + Blue = NewBrush("1;34") + Cyan = NewBrush("1;36") + + colors = []Brush{ + Cyan, // Trace cyan + Blue, // Debug blue + Green, // Info green + Yellow, // Warn yellow + Red, // Error red + Purple, // Critical purple + Red, // Fatal red + } + consoleWriter = &ConsoleWriter{lg: log.New(os.Stdout, "", 0), + Level: TRACE} +) // ConsoleWriter implements LoggerInterface and writes messages to terminal. type ConsoleWriter struct { @@ -68,6 +80,76 @@ func (_ *ConsoleWriter) Flush() { func (_ *ConsoleWriter) Destroy() { } +func printConsole(level int, msg string) { + consoleWriter.WriteMsg(msg, 0, level) +} + +func printfConsole(level int, format string, v ...interface{}) { + consoleWriter.WriteMsg(fmt.Sprintf(format, v...), 0, level) +} + +// ConsoleTrace prints to stdout using TRACE colors +func ConsoleTrace(s string) { + printConsole(TRACE, s) +} + +// ConsoleTracef prints a formatted string to stdout using TRACE colors +func ConsoleTracef(format string, v ...interface{}) { + printfConsole(TRACE, format, v...) +} + +// ConsoleDebug prints to stdout using DEBUG colors +func ConsoleDebug(s string) { + printConsole(DEBUG, s) +} + +// ConsoleDebugf prints a formatted string to stdout using DEBUG colors +func ConsoleDebugf(format string, v ...interface{}) { + printfConsole(DEBUG, format, v...) +} + +// ConsoleInfo prints to stdout using INFO colors +func ConsoleInfo(s string) { + printConsole(INFO, s) +} + +// ConsoleInfof prints a formatted string to stdout using INFO colors +func ConsoleInfof(format string, v ...interface{}) { + printfConsole(INFO, format, v...) +} + +// ConsoleWarn prints to stdout using WARN colors +func ConsoleWarn(s string) { + printConsole(WARN, s) +} + +// ConsoleWarnf prints a formatted string to stdout using WARN colors +func ConsoleWarnf(format string, v ...interface{}) { + printfConsole(WARN, format, v...) +} + +// ConsoleError prints to stdout using ERROR colors +func ConsoleError(s string) { + printConsole(ERROR, s) +} + +// ConsoleErrorf prints a formatted string to stdout using ERROR colors +func ConsoleErrorf(format string, v ...interface{}) { + printfConsole(ERROR, format, v...) +} + +// ConsoleFatal prints to stdout using FATAL colors +func ConsoleFatal(s string) { + printConsole(FATAL, s) + os.Exit(1) +} + +// ConsoleFatalf prints a formatted string to stdout using FATAL colors +func ConsoleFatalf(format string, v ...interface{}) { + printfConsole(FATAL, format, v...) + os.Exit(1) +} + func init() { Register("console", NewConsole) }