From d8fc095f874ac79865b940df59b3b9ddff3bdf80 Mon Sep 17 00:00:00 2001 From: brl Date: Sat, 19 Dec 2015 19:23:51 +0000 Subject: [PATCH] Only include timestamp and colors in log if stderr is terminal --- main.go | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/main.go b/main.go index 9d9c7e1..a266f54 100644 --- a/main.go +++ b/main.go @@ -9,14 +9,31 @@ import ( "github.com/op/go-logging" "github.com/subgraph/fw-daemon/nfqueue" "sync" + "syscall" + "unsafe" ) var log = logging.MustGetLogger("sgfw") -var format = logging.MustStringFormatter( + +var logFormat = logging.MustStringFormatter( + "%{level:.4s} %{id:03x} %{message}", +) +var ttyFormat = logging.MustStringFormatter( "%{color}%{time:15:04:05} ▶ %{level:.4s} %{id:03x}%{color:reset} %{message}", ) +const ioctlReadTermios = 0x5401 + +func isTerminal(fd int) bool { + var termios syscall.Termios + _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlReadTermios, uintptr(unsafe.Pointer(&termios)), 0, 0, 0) + return err == 0 +} func init() { + format := logFormat + if(isTerminal(int(os.Stderr.Fd()))) { + format = ttyFormat + } backend := logging.NewLogBackend(os.Stderr, "", 0) formatter := logging.NewBackendFormatter(backend, format) leveler := logging.AddModuleLevel(formatter)