2016-10-30 46 views
0

我在Golang中創建了一個最小化記錄器。 我試圖保持它儘可能簡單但出現兩個問題:在Golang中實現最小化記錄器

  • 消息串被示出爲陣列包裹在括號[]
  • 使用log.Lshortfile標誌文件名始終顯示爲logger.go

CMD

這裏是我的代碼:

package logger 

import (
    "log" 
    "os" 
) 

var (
    dlog = log.New(os.Stdout, "\x1B[36mDEBUG: \x1B[0m", log.Ldate|log.Ltime|log.Lshortfile) 
    wlog = log.New(os.Stdout, "\x1B[35mWARN: \x1B[0m", log.Ldate|log.Ltime|log.Lshortfile) 
    ilog = log.New(os.Stdout, "\x1B[32mINFO: \x1B[0m", log.Ldate|log.Ltime|log.Lshortfile) 
    elog = log.New(os.Stderr, "\x1B[31mERROR: \x1B[0m", log.Ldate|log.Ltime|log.Lshortfile) 
) 

// Debug Log 
func Debug(a ...interface{}) { 
    dlog.Println(a) 
} 

// Warn log 
func Warn(a ...interface{}) { 
    wlog.Println(a) 
} 

// Info Log 
func Info(a ...interface{}) { 
    ilog.Println(a) 
} 

// Error Log 
func Error(a ...interface{}) { 
    elog.Println(a) 
} 

我用它們是這樣的:logger.Debug("Hello") or logger.Info("There")

我該如何正確實現它?謝謝。

回答

2

Println傳遞一個參數,一個接口片{},並使用切片符號打印它。爲了解決這個問題,將可變參數傳遞給函數,作爲被調用函數的可變參數。

func Debug(a ...interface{}) { 
    dlog.Println(a...) // <-- note ... here 
} 

Here's the doc on variadic args

致電Output解決文件名問題。

func Debug(a ...interface{}) { 
    dlog.Output(2, fmt.Sprintln(a...)) 
}